# BetterViewer replaces the browser image viewer and then keeps going into editing and OCR

> BetterViewer is a browser extension and Tauri desktop app that takes over image viewing in Chrome, Edge and Firefox, and extends it into annotation, adjustment, background removal, OCR, QR scanning and bulk export. OCR, background removal and QR scanning run entirely in the browser, and it is also a hosted web app.

**Ademking/BetterViewer** — A fast image viewer and editor for your browser and desktop

- Repository: https://github.com/Ademking/BetterViewer
- Website: https://betterviewer.web.app
- Stars: 556 · Forks: 31
- Language: TypeScript
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/ademking-betterviewer

## It takes over when you open an image, and it never leaves the page

BetterViewer is described as a fast image viewer and editor for your browser and desktop, and the README is direct about its origin: it was designed as a replacement for the image viewing mode built into Firefox and Chrome based web browsers.

The entry points are two. Open any image in a new tab and BetterViewer takes over, or right-click an image on any page and choose Open this image in BetterViewer to zoom, drag and edit it in an overlay without leaving the page, with Esc going back. There is a third path for pages with many pictures: right-click the page itself and choose Browse all page images as a gallery to flip through every picture on it, with the arrow keys moving between them.

The design decision that follows from that is stated in the README without being highlighted: everything runs in your browser, including OCR, background removal and QR scanning. That is a meaningful claim, and it is the difference between a tool you can use on a confidential screenshot and a tool that uploads it somewhere.

The image viewer is the minimum. The screenshots in the README are captioned Viewing an image, Annotations, spotlight and layers, Color picker, Extract text (OCR), QR code scanner, Compress and resize, Settings, and Gallery of all images on a page, which is a fair summary of how much more there is than a zoom control.

## The desktop app is the same code through Tauri

BetterViewer is also a desktop image viewer for Windows, Linux and macOS, and the README states that it is the same viewer as a desktop app, downloaded from the latest release.

The implementation detail that makes that possible is in the repository. There is a src-tauri/ directory, a tauri script, a desktop script and a build:desktop script in package.json, and the badge for the desktop app links to a Tauri icon. The web frontend is shared, and Tauri wraps it as a native application, which is why one codebase produces a browser extension, a hosted web app and a desktop binary.

There is also a hosted version. The homepage is betterviewer.web.app, and the package.json has a deploy script that runs a build and then firebase deploy with only hosting, along with a .firebaserc and a firebase.json at the top level. The scripts directory also has a build-extension.mjs and an i18n script, and there is a build-emoji-data script that generates the emoji data from emojibase-data, which is why the emoji picker supports skin tones and categories without shipping a hand written list.

The structure of the repository says the same thing. There is an extension/ directory, a src/ directory for the shared application, public/ for static assets, a scripts/ directory, a docs/ directory with the logo and screenshots, and a patches/ directory used by patch-package, which runs as a postinstall step. The patches are how the project keeps a dependency behaving the way it needs without forking it.

## The viewing features are the ones you will feel first

The viewing section of the README is long, and the entries are specific enough to be useful.

Zooming is smooth, by wheel, pinch and the plus and minus keys, with fit, 100 percent and zoom to selection, panning by drag, by Space and by scrollbars, and crisp pixels when zoomed in close. A Navigator gives an overview of the whole image with the visible part outlined, which you can click or drag to move around and scroll over to zoom. The board background can be a blurred image, black, white or a transparency grid, which matters when you are checking an image with an alpha channel.

Rotation and flipping are there, and the image info panel shows full EXIF, camera, exposure and GPS with a map link, and you can copy a line or everything. Then the tools that separate this from a plain viewer: Measure distances and angles, rulers, and draggable guides.

The interface is configurable in ways that are worth noting. There is a customizable toolbar where you pick the buttons it shows in Settings, Appearance, Toolbar buttons, or you right-click the toolbar. There is a dark, light and system theme, floating panels, and a quick launch palette on Ctrl or Cmd K. And there are 16 languages, from English and the two Chinese scripts through Arabic, which the README notes is right to left, to Hindi, Korean, Japanese and Vietnamese, following your browser's language and changeable in Settings, Appearance, Language.

## Editing and annotating in one surface, with history

The editing section covers the operations that usually mean a separate application.

There is cropping with aspect presets, straightening with a level line, perspective correction, and resizing. Then adjustments: brightness, contrast, temperature, tint, vibrance, saturation, hue, sharpen, noise reduction, blur, vignette, grayscale, sepia, invert, eight presets and a one-click Auto enhance. Levels, curves in RGB, R, G and B, and a live histogram. Remove background, described as AI and on your device. Hold Compare to see the original, with full undo and redo.

Animated formats are handled rather than flattened. Animated GIF, WebP and APNG play, even with thousands of frames, with a frames bar and a scrubber to pause on any frame, and crops, resizes, adjustments and annotations apply to every frame, and the result saves as an animated GIF.

Annotation is the other half. Pen, highlighter and eraser, 31 shapes including arrows, callouts and stars, and numbered counters. Text with 44 fonts, background, outline and shadow. An emoji picker with search, categories and skin tones. Blur and pixelate zones to hide faces, plates or text. A Spotlight mode that dims everything except what matters. Inserting images on top, and a Layers panel for reorder, hide and delete. A color picker with a loupe in HEX, RGB and HSL that snaps to a grid.

And a History panel that lists every edit so you can click one to go back to it, which is a better model than a linear undo stack when you have made twenty changes.

## Tools that touch the outside world, and the ones that do not

The tools and sharing section is where the privacy question is decided, so it is worth reading carefully rather than skimming.

The local ones are Extract text for OCR in 13 languages, and the QR code scanner, which reads links, Wi-Fi, contacts and events. Compress comes with a quality slider and a before and after size. Export covers PNG, JPEG and WebP, with animated GIF for animations, and copy to clipboard.

The ones that leave the machine are named in the same list. Upload to kappa.lol or ImgBB, Open in Photopea, and reverse image search on Google Lens, Bing, Yandex and TinEye.

So the extension is not uniformly local. The README's claim is that OCR, background removal and QR scanning run in your browser, which is true of the three it names, and the upload and reverse search features are obviously network operations. That distinction matters, and the extension does not treat it as a secret, but it is the line you have to know about before you use the upload button on a screenshot of something internal.

The API key handling confirms the split. The .env.example file in the repository documents an optional default ImgBB API key, with a comment that VITE_* values are embedded into production builds, and that for public deployments you should prefer entering the key in Settings, Sharing. That is a specific and useful warning, because a key baked into a public web build is a key anyone can use.

Two more features round out the list: Screenshot this page, from the toolbar button or Alt+Shift+S, which then drops you into the annotator, and the Gallery, Alt+Shift+G, which browses all images on a page and downloads them all as a ZIP.

## Building it, and the deployment split the scripts describe

The package.json scripts show that this is one codebase with three build targets, and they are worth reading as documentation.

```json
    "build": "tsc && vite build",
    "build:ext": "vite build --mode extension && node scripts/build-extension.mjs",
    "build:desktop-web": "tsc && vite build --mode desktop"
```

The default build compiles with TypeScript and bundles with Vite. The extension build adds an extension mode and a script that assembles the extension package. The desktop web build has its own mode, and the desktop application itself is produced by tauri build, with tauri dev for the development loop.

The deployment script is the shortest one and it shows the hosting arrangement.

```json
    "deploy": "npm run build && firebase deploy --only hosting",
```

So the web app is hosted on Firebase Hosting, the extension is built separately, and the desktop app is a Tauri build of the same frontend.

For a developer, the practical order is npm install, which triggers the postinstall patch-package step that applies the patches/ directory, then npm run dev for the Vite development server, or npm run desktop for the Tauri loop. The i18n script and the emoji data script are the two generators, and the emoji one has to be run when the emoji data changes.

The dependency list explains the feature set. @huggingface/transformers is there for the on-device AI work, @nuintun/qrcode for scanning, and @ark-ui/react and @base-ui/react for the interface primitives, with Tailwind 4 and Vite 8 doing the styling and bundling.

## Where BetterViewer is the wrong choice

Three cases, and the first one is about surface area rather than capability.

If you want a fast image viewer, this is a lot of extension. The toolbar, the layer system, the OCR, the background removal, the reverse image search, the gallery and the uploader are all present in the same package, and an extension that can read the page, extract text and upload to third party services is a different kind of object from one that zooms an image. The README's own framing is that it makes image viewing faster, easier and more fun, and the feature list reads like a product that grew by accretion rather than a tool with a single job. That is a legitimate way to build something, and it is also why some people will not install it.

The second is the on-device AI. Remove background and OCR are described as running in your browser, which is what @huggingface/transformers in the dependency list is for. That means model weights are downloaded, the operations are not free in terms of time and memory, and on a lower powered machine the experience will be slower than the screenshot implies. The README does not publish timings, so you are finding out by trying it.

The third is the desktop app's value proposition. If you want a desktop image viewer, your operating system already has one, and BetterViewer's desktop build is the same web frontend in a Tauri shell. Its value is that the same tool works in both places, not that it does something the system viewer cannot.

Finally, the obvious caveat. An extension that injects an overlay on any image and can read the whole page is a privileged component, and a project with three release tags in the first ten days of October 2026 is moving fast. That is not an argument against using it, it is an argument for checking the permissions listing and the changelog before you rely on it for daily work.

## Conclusion

Adopt BetterViewer if you spend time looking at images in a browser and want annotation, measurement, OCR and bulk export without uploading your files anywhere, and you are comfortable with a large feature surface in an extension. Do not adopt it if you need a minimal image viewer, or if the AI features that run on device are not acceptable in your environment, since the removal and OCR paths carry their own model weight. Before you install, read the permissions the extension requests in your browser store listing, and check the reverse image search and upload features before enabling them.

## FAQ

### What is BetterViewer?

BetterViewer is a browser extension and desktop app that replaces the image viewing mode built into Firefox and Chrome based browsers, adding zooming, annotation, adjustments, background removal, OCR, QR scanning and bulk gallery export. Everything runs in your browser, including OCR, background removal and QR scanning.

### Which browsers does BetterViewer support?

The README links listings for the Chrome Web Store, Microsoft Edge Add-ons and Firefox Add-ons, and a desktop app for Windows, Linux and macOS built with Tauri and downloaded from the latest release.

### Does BetterViewer upload my images anywhere?

The OCR, background removal and QR scanning features run in your browser, but the README also lists upload to kappa.lol or ImgBB, opening in Photopea and reverse image search on Google Lens, Bing, Yandex and TinEye, which are network operations. The .env.example file notes that a default ImgBB API key can be embedded into production builds and recommends entering it in Settings, Sharing for public deployments.

### How do I build BetterViewer from source?

The package.json scripts separate the three targets: the default build runs tsc and vite build, the extension build uses vite build with extension mode followed by a build-extension script, and the desktop application is produced with tauri build, with tauri dev for the development loop. The web app is deployed with firebase deploy after a build.

## Sources

- [Ademking/BetterViewer on GitHub](https://github.com/Ademking/BetterViewer)
- [License: MIT](https://github.com/Ademking/BetterViewer/blob/master/LICENSE)
- [Project website](https://betterviewer.web.app)
- [README](https://github.com/Ademking/BetterViewer/blob/master/README.md)
- [Releases](https://github.com/Ademking/BetterViewer/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/ademking-betterviewer
