ITpris Verktyg

Audit

How ITpris Verktyg works

The apps run in your browser. This page lists the browser features they use, every network request they can make, and what is kept on your device, so you can check each claim yourself. Every statement here was checked against the source code in the public repository.

The short version

In plain words

Where do my files go?

Nowhere. When you open a photo, a PDF or a spreadsheet, the app reads it inside this browser tab. There is no upload step and no ITpris Verktyg server that could receive it. What you save goes to your own disk, or to this browser's storage on this device. Only if you connect an AI service with your own key, and allow it, does a copy go to that service (see the AI button).

Why does an app sometimes download something?

Some features need a large file that most people never use: an AI model (to remove a background, read text or transcribe speech), the video engine (to convert a video), or a font for another writing system. These are fetched only when you use the feature, after the app tells you what it is and how big it is, and they are kept in the browser so it happens once. Your own files are never part of that request.

Does it work offline?

Yes, after the first visit. The site's own files are kept by the browser, so the apps open and work without a connection. Only a download you have not made yet (a model or a font) needs the network.

Do I need to install anything?

No. Just open an app in the browser on your phone, tablet or computer and start. It keeps working without internet after your first visit. Want an icon on your home screen? On iPhone or iPad, tap Share, then Add to Home Screen. On Android, open the browser menu and tap Add to Home screen. On a computer, click the install icon in the address bar. You do not need the App Store or Google Play, and your files stay on your device.

What does the AI button send, and where?

That depends on the model you pick. A model on your device (it needs WebGPU and is downloaded once) answers inside this tab, and nothing you ask leaves the device. Ollama, LM Studio and similar servers run on your own computer, or on one in your network that you set up. With your own key for a service such as Claude, ChatGPT, Gemini, OpenRouter or Groq, your messages go from your browser straight to that provider, with no ITpris Verktyg server in between, and its terms and prices apply. A copy of a file or a picture of your work is sent only after the panel asks and you allow it (you can allow it for a request, a visit or always, and take that back in AI permissions). Pictures made or changed by AI (Generate image, Edit with AI) need an image service you connect, such as OpenAI, Gemini or OpenRouter with your own key: nothing in the browser draws them. Models on your device and on your own computer cost nothing; Gemini, Groq and Mistral have free tiers, and OpenRouter has free models (the panel marks them Free). A key is kept in this tab until you close it, or in this browser only when you tick Remember on this device.

Can an AI agent use the apps?

In a browser that supports WebMCP, yes: an assistant in the browser, or an agent on your computer connected through a browser extension, can run an app's commands, File Converter conversions and workflows, and open, save or download files. It refers to your files by ids; the work runs in this tab and the apps upload nothing, though the agent sees what the tools report back. Anything that deletes or replaces your work asks you first. WebMCP is an early draft: Chrome has it in a trial (versions 149 to 156) and behind a flag, Edge behind a flag, and Firefox and Safari not yet. Turn it off in Settings, or in Help, AI agents.

Can I check this myself?

Yes. The source code is public, and the sections below list every browser feature the apps use and every request they can make, with the file that makes it. You can also open your browser's developer tools, go to the Network tab and watch: opening and saving your files sends nothing.

Use ITpris Verktyg from Claude Code and other AI apps

Coming soon: an AI app on your computer, such as Claude Code, Codex, Cursor, VS Code or Claude Desktop, can use the ITpris Verktyg app open in your browser: its real commands, conversions and workflows, with your files going in and results coming out as files on your computer. It runs through the ITpris Verktyg MCP server, a small program the AI app starts on your computer. It needs no account and no install beyond the AI app itself.

  1. Claude Code: type /plugin marketplace add partpriced/claude-plugin, then /plugin install worksuite@worksuite. Do this once.
  2. Type /worksuite:tlbx-connect (add an app name, such as imageeditor, if you like). Claude Code opens ITpris Verktyg in your browser and shows a short code.
  3. Chrome asks once whether this site may use apps and services on this device. Choose Allow: that is how the page reaches Claude Code on your computer. The page talks only to your own computer (127.0.0.1), not to your network.
  4. Type the code in the page. The page then shows “Claude Code is connected · Disconnect” in the corner. Press Disconnect, or close the tab, to end it.

Each tab is paired on its own, and the code works once. Nothing else on your computer can use the page without it. Actions that delete or replace your work still ask you in the page, as in the AI panel. Any ITpris Verktyg page can connect from the command palette: Ctrl+K (⌘K on a Mac), then “Connect an AI app…”.

The setup for other AI apps (Codex, Gemini CLI, Cursor, VS Code, Windsurf, Claude Desktop) appears here when scripts run.

ChatGPT chats can only reach servers on the internet, so they cannot use this local server yet. Codex in the ChatGPT desktop app can.

Browser APIs, and the specification for each

The file paths are the main places each API is used. Search the repository for the API name to find the rest.

Browser APIs used by the apps
Browser APIWhat it is used forWhere in the codeSpecification
File System Access: window.showDirectoryPicker, FileSystemDirectoryHandle, createWritableLocal drives in Files, the backup folder for cloud sync, the Gallery folder import (read only), and loading an AI model folder from disk. Chrome and Edge only. Writes replace a file only when it closes.drive/js/core/prov-dir.js, drive/js/ui/prov-drives.js, shared/sync/providers/local.js, gallery/js/io/source.js, shared/ai/webllm.jswicg.github.io/file-system-access · MDN
IndexedDBFiles files, folder handles, business records, font and AI model storage, encrypted sign-in tokens. Full list in What is stored.shared/hub.js, drive/js/core/drives-store.js, shared/data/store.js, shared/sync/tokens.js, shared/library/store.jsw3.org/TR/IndexedDB · MDN
localStorageSmall settings: your consent choice, cloud sync settings, per-app settings, Drive view preferences.shared/consent/state.js, shared/sync/config.js, shared/profile/profile.js, drive/js/core/util.jsWHATWG HTML, Web Storage · MDN
sessionStorageSign-in state kept only while a cloud sign-in redirect is in progress. Cleared when the tab closes.shared/sync/sync.jsWHATWG HTML, Web Storage
Origin Private File SystemNot used. The code has no navigator.storage.getDirectory call.noneWHATWG File System
Service WorkersOffline use. Registered by each app page after it loads. It answers only same-origin GET requests.service-worker.js, shared/pwa.jsw3.org/TR/service-workers · MDN
Cache StorageSaved copies of the site's own files, the cutout model files, and AI chat model files after you download them.service-worker.js, shared/cutout/loader.js, shared/ai/webllm.jsW3C Service Workers, Cache objects · MDN
Web App ManifestLets a browser install the site as an app. Declares name, icons and start page.manifest.webmanifestw3.org/TR/appmanifest · MDN
Storage Manager: navigator.storage.persist(), estimate()Asks the browser to keep this site's storage after install or in standalone mode. Storage asks you before it asks the browser. Shows how full storage is.shared/pwa.js, shared/storage/storage.jsWHATWG Storage · MDN
Web WorkersRunning heavy work off the page: image cutout, upscale, AI Tools inference, PDF build.shared/cutout/cutout.js, upscale/js/engine/engine.js, aitools/common.js, pdf/js/io/build.jsWHATWG HTML, Workers · MDN
WebAssemblyRuns the bundled ONNX Runtime Web for AI Tools, Upscale, Image to 3D, face detection and cutout, with one thread. The chat app's WebLLM library is also WebAssembly-based.aitools/workers/ort.js, upscale/js/engine/worker.js, img3d/js/model/depth.js, shared/faces/index.js, shared/ai/webllm.jsWebAssembly Core spec · MDN
WebGPUThe chat app checks what your computer can run, and the cutout worker asks for a GPU adapter. Runs the chat model on the GPU, in Assistant and in the AI panel of every app.shared/ai/sysinfo.js, shared/cutout/worker.js, shared/ai/webllm.jsw3.org/TR/webgpu · MDN
WebGL 23D preview and the colour grading in Video Editor.3d/js/render/stage.js, drive/js/core/render3d.js, videostudio/js/render/grade.jsKhronos WebGL 2.0 spec · MDN
Canvas 2D and OffscreenCanvasDrawing, image editing and export in almost every app.About 130 files call getContext('2d'), for example imageeditor/js/io/save.jsWHATWG HTML, Canvas · MDN
File and Blob, drag and dropOpening files you choose or drop onto a page. Files never leave the page unless you save or share them.shared/drop/, shared/preview/chrome.jsW3C File API · MDN
Web Crypto: crypto.subtleSHA-256 checks of every downloaded file before it is stored, and AES-GCM for encrypted sign-in tokens.shared/cutout/loader.js, shared/library/store.js, shared/sync/tokens.jsw3.org/TR/WebCryptoAPI · MDN
NotificationsBrowser notifications for reminders, only after you press the button to allow them.reminders/js/app.js, shared/reminders/engine.jsWHATWG Notifications · MDN
BroadcastChannelMessages between open tabs of this site (channel ITpris Verktyg). Stays inside the browser.shared/hub.jsWHATWG HTML, Broadcasting · MDN
Web Share: navigator.share()The system share sheet, only when you press Share. The system then sends the file to the app you pick.shared/preview/chrome.js, ai/js/ui/speccard.jsw3.org/TR/web-share · MDN
WebMCP: document.modelContext.registerTool()Offers an AI agent in the browser the app's actions as tools (its commands, the file operations, the files by id), only where the browser has the API and the setting "Let AI agents use this app" is on. The tools run in the page. The origin trial token is in each page's head.shared/agent/webmcp.js, shared/agent/workspace.js, shared/agent/boot.jsW3C Web Machine Learning CG draft · Chrome
WebSocketThe link to an AI app on your computer (the ITpris Verktyg MCP server), only after you choose “Connect an AI app…”. It connects to ws://127.0.0.1, this computer only.shared/agent/bridge.jsWHATWG WebSockets
FetchEvery network request in the apps. The full list is in Outbound requests.About 35 fetch( call sites in about 30 files (a few are comments)WHATWG Fetch · MDN

What is stored on this device

Everything below is kept in this browser, on this device. Nothing here is sent to a server. Each site has its own storage, so the same app in another browser has its own copy.

Storage used by the apps (examples from the code; a search for indexedDB.open and localStorage lists them all)
NameTypeWhat it holdsSet in
tlbx-driveIndexedDBFiles files and folders, including the file contents.shared/hub.js
tlbx-drive-foldersIndexedDBThe named local drives: each folder handle and its name. Removing a drive forgets the handle only.drive/js/core/drives-store.js
tlbx-sync, tlbx-sync-localIndexedDBEncrypted cloud sign-in tokens (AES-GCM under a non-extractable key). The picked backup folder handle.shared/sync/tokens.js, shared/sync/providers/local.js
tlbx-dataIndexedDBBusiness records: customers, products, stock, invoices, payments and ledger entries (shared/data/schema.js).shared/data/store.js
tlbx-libraryIndexedDBFonts installed from Get more and font files you add.shared/library/store.js
tlbx-aitools, tlbx-aiIndexedDBAI Tools models you installed, and chats in the AI chat app.aitools/models.js, ai/js/core/store.js
tlbx-sessionIndexedDBEach app's open view and unsaved drafts, so a return visit picks up where you left off.shared/session/session.js
tlbx-consentlocalStorageYour analytics, ads and rates choices. Off until you choose.shared/consent/state.js
tlbx-synclocalStorageCloud sync settings: your OAuth client IDs and last sync times. Tokens are not kept here.shared/sync/config.js
tlbx-ai-keysIndexedDBYour AI keys, only when you tick Remember on this device. Without it a key stays in this tab (sessionStorage) and is gone when you close it. Left out of backups.shared/ai/cloud/keys.js
tlbx-ai.cloud, tlbx-ai.imagegen, tlbx-ai.permissionslocalStorageWhich AI service and model you chose, your spending cap, picture settings and the AI permissions you gave. Never a key.shared/ai/cloud/keys.js, shared/ai/imagegen/core.js, shared/ai/permissions.js
tlbx.agentslocalStorage"off" when you turned off "Let AI agents use this app". Nothing is stored while it is on.shared/agent/boot.js
tlbx.bridgesessionStorageWhile this tab is paired with an AI app on your computer: the port and the pairing token, so a reload stays connected. Gone when you disconnect or close the tab.shared/agent/bridge.js
tlbx-profilelocalStoragePer-app settings you changed from the default.shared/profile/profile.js
tlbx-drive.prefs, tlbx-drive.themelocalStorageFiles view preferences and theme.drive/js/core/util.js
worksuite-v38Cache StorageSaved copies of the site's own files, so the site works offline.service-worker.js
tlbx-cutout-v1Cache StorageModel files for cutout, after the check of their SHA-256.shared/cutout/loader.js

Cookies: the site's code never writes a cookie (the repository has no document.cookie call). Your consent choice is in localStorage, not a cookie. Google's analytics and ads scripts may set their own cookies when they run. Section Cookies and analytics says when they run.

Outbound requests: every place a request can go

The list below is complete for the repository: it comes from a search of every fetch(, XMLHttpRequest, script and image address, and every external URL in the code. Apart from the analytics and ads scripts, which load only as stated below, the apps load no third-party scripts, fonts or stylesheets. There are no third-party fonts or iframes.

Every outbound request the sites can make
DestinationWhich app or partWhyWhen it happens
www.googletagmanager.com (Google Analytics, ID G-HW6FWQVFK3)Homepage (index.html); other pages through shared/consent/consent-mode.jsPage-view measurementHomepage: on every visit, with analytics set to denied until you accept. Other pages: only after you accept analytics.
pagead2.googlesyndication.com (AdSense)Pages with ad slots (shared/ads/ads.js)AdsOnly after you accept ads. Loaded by the one loader in shared/consent/consent-mode.js.
huggingface.co, and its storage hosts hf.co and xethub.hf.coAI chat (shared/ai/webllm.js, ai/js/core/engine.js); AI Tools and the OCR apps (aitools/model-registry.js, aitools/models.js)Model files: OCR (PP-OCRv4), tags, and the chat modelsAfter you press Download, or install a model in Get more, and confirm its size and licence. AI Tools checks each file's SHA-256, and a file must come from a Hugging Face host or the partpriced/cdn repository.
cdn.jsdelivr.net (jsDelivr, only /gh/worksuite/cdn@ a fixed release)Every file from the partpriced/cdn repository (shared/cdn/assets.js): Get more packs, the speech and OCR models, the HEIC, camera RAW, 3D and video enginesA faster, cached copy of the repository below; files over 20 MB come from raw.githubusercontent.comThe same moments as the row below. If jsDelivr does not answer or sends wrong bytes, the same file is fetched from raw.githubusercontent.com and checked the same way.
raw.githubusercontent.comAI chat (shared/ai/webllm.js, the GPU kernels); Get more packs (shared/library/packs.json)Kernels for the chat model; font files from github.com/google/fonts (OFL); language fonts (Noto, OFL) for writing other scripts such as Arabic, Chinese or Hindi; the Real-ESRGAN 4x model for Upscaler, the depth model for Image to 3D, and the speech models for Transcription and AI Tools (Whisper, KB-Whisper, NB-Whisper; aitools/speech-models.js), from the partpriced/cdn repositoryWhen you press Download in Get more or in the Language and model dialog and confirm, or load a chat model. A language font also downloads when you write text in a script that needs one (in PDF Editor, for example): the app asks first, unless you chose to download language fonts automatically (shared/fonts/jit.js). Each file is checked against its SHA-256 before it is kept.
accounts.google.com, oauth2.googleapis.com, www.googleapis.comCloud sync to your own Google Drive (shared/sync/providers/gdrive.js, pkce.js, config.js)Sign-in, then backup and restore of one backup file, in an optional folder. Uses the drive.file scope, which reaches only the files this app creates or that you pick.Only when you connect with your own OAuth client ID, and when you press a backup or sync button.
www.dropbox.com, api.dropboxapi.com, content.dropboxapi.comCloud sync to Dropbox (shared/sync/providers/dropbox.js)Same as Google Drive, for DropboxOnly when you connect and press a backup or sync button.
data-api.ecb.europa.euExchange rates (shared/data/rates-ecb.js, opened from Settings, and read by Ledger and Calculator)Daily EUR reference rates from the European Central BankOnly when the rates category is on and you press Update. Update on open runs only when you also tick it.
The address of an image dragged from another websiteImage Editor (imageeditor/js/app/tabs.js)Opens the dragged image in a new tabOnly when you drag an image from another page onto Image Editor.
verktyg.itpris.se (the site itself)Every page, the homepage logo, the service workerThe site's own filesOn each visit. Nothing else from this origin is requested.
The AI service you connect with your own key: for example api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, openrouter.ai or api.groq.com, or the address you type for Ollama, LM Studio or another serverThe AI panel (shared/ai/cloud/, the list of services in shared/ai/cloud/catalog/); AI pictures (shared/ai/imagegen/)Your messages, the app's tools and their results, and a copy of a file or a picture only after you allow it; for AI pictures, the prompt and, for an edit, the picture (at most 1536 px)Only after you add your own key or a server address and send a request. A model on your device sends nothing.
127.0.0.1 (your own computer)Connect an AI app (shared/agent/bridge.js)The page talks to the ITpris Verktyg MCP server that your AI app started: the app's tools, their results, and the files you ask to send or saveOnly after you choose “Connect an AI app…” and type the code the AI app shows. Chrome asks first.
Links only: Patreon, YouTube and VimeoDonate link (shared/consent/donate.js), Notes video links (notes/js/video.js)Opens the site in a new tab when you click itOnly when you click. A video in a note shows as a link, not an embedded player or a thumbnail image.

Two things that look like network use but are not: tools/vendor-codemirror.mjs fetches packages from cdn.jsdelivr.net when a developer runs it by hand to refresh the vendored code. The apps never load that CDN. The mail viewer (eml/js/frame.js) blocks remote images and scripts in the mail with a Content Security Policy, so opening a message does not load remote images or scripts.

Cookies and analytics

Working offline

After one visit, the site's own files are kept in Cache Storage by the service worker (service-worker.js, with its file list in sw-precache.js). Pages are checked over the network first, then taken from the cache, and then the offline page is shown. Your files are not in the service worker cache: they are in the folder you picked, or in IndexedDB. The apps keep working with the network off. Downloads (the models and font packs listed above) need the network the first time.

How to check it yourself

  1. Network tab, with the page loaded. Open the app, press F12 (or Cmd+Option+I on a Mac), and open the Network tab. Tick "Preserve log", then reload. Read the Domain column. On a plain visit, you should see only verktyg.itpris.se, plus Google's analytics domains on the homepage.
  2. Network tab, offline. In the Network tab, open the throttling menu and choose Offline. Reload, then open a file, edit it and save it. The app should work. Anything that needs a download says so.
  3. Application tab, storage. In Chrome or Edge, open the Application tab. Under Storage, see Local storage, Session storage, IndexedDB, Cookies, Cache Storage and Service workers. Compare what you see with the tables on this page.
  4. Accept or refuse, then compare. Refuse analytics and ads in the consent strip, reload, and check the Network tab again. Then accept them, and see which requests appear.
  5. Read the source. The code is public in the ITpris Verktyg repository on GitHub. Search it for fetch(, indexedDB.open, localStorage or showDirectoryPicker to confirm any row on this page. The consent code is in shared/consent/, cloud sync in shared/sync/, and the download lists in shared/library/ and aitools/.

Local folders (the File System Access API) need Chrome or Edge. Firefox and Safari do not offer them, and the apps say so where it applies.