Skip to content
Flying Pizza edited this page Apr 19, 2026 · 3 revisions

Frequently asked questions and troubleshooting tips.


General

Is GrainLab free?

Yes. GrainLab is completely free, open-source (MIT license), and requires no account or sign-up.

Do I need to install anything?

No. GrainLab runs entirely in your browser. Open the live demo and start editing immediately.

What image formats are supported?

JPG · PNG · GIF · WebP · BMP · TIFF

The image is read by the browser's built-in image decoder, so support depends slightly on your browser version.

Does GrainLab upload my photos anywhere?

No. All processing happens locally in your browser using the Canvas API and Web Workers. Your images never leave your device.


Gallery & Persistence

Will my photos still be there after I close the tab?

Yes. GrainLab stores your full gallery — including the original image data and per-image settings — in your browser's IndexedDB database (grainlab_gallery). They are restored automatically the next time you open the app.

My gallery disappeared. What happened?

IndexedDB data is tied to the browser profile and origin. It can be lost if you:

  • Cleared your browser's site data or cookies.
  • Used a private / incognito window (data is cleared when the window closes).
  • Switched browsers or browser profiles.

Can I use GrainLab on multiple devices?

Not with automatic sync. Because all data is stored locally in IndexedDB, each device has its own independent gallery. You can transfer images by exporting them and re-importing on the other device.

How do I remove all my images?

Click the button on each thumbnail in the film strip, or clear the site data for seamys.github.io in your browser's developer tools / privacy settings.


Performance

Why does export take a while for large images?

Export processing runs in a Web Worker using OffscreenCanvas at full resolution, which takes longer than the downscaled live preview. The UI remains responsive during export. Processing time scales roughly with the number of pixels in the image.

The live preview feels slow on my machine. What can I do?

  • Try using a smaller image for editing.
  • Disable effects you aren't using (set their intensity to 0 — the pipeline skips them instantly).
  • Make sure your browser is hardware-accelerated (check your browser's graphics settings).

Effects & Presets

Can I save my own custom preset?

Not yet. You can adjust all sliders manually and the settings are saved to localStorage, so they persist across page refreshes. A custom preset save/load feature may be added in a future version.

What is the difference between Halation and Bloom?

Both create a glow around bright areas, but:

  • Halation simulates the physical phenomenon of light bouncing off the back of the film base — it produces a tight, colored (red, warm, or gold) glow, most visible on specular highlights and backlit scenes.
  • Bloom is a larger, softer, color-neutral glow used to give images a dreamy or cinematic quality.

What is the difference between Fade and Shadows (in Color Grading)?

  • Fade lifts the black point uniformly — it adds a fixed floor to all dark pixels, simulating overexposed or aged film.
  • Shadows (in Color Grading) is a tone-curve-style adjustment that brightens or darkens the shadow range while leaving midtones and highlights relatively untouched.

Why does my exported image look different from the preview?

The preview renders a scaled-down version of the image for speed. Export renders at full resolution. In rare cases, effects that depend on the absolute pixel count (such as grain size or blur radius) may look slightly different at very different resolutions. If you notice a systematic difference, please open a GitHub issue.


Development

How do I run the project locally?

git clone https://github.com/seamys/grainlab.git
cd grainlab
npm install
npm run dev

See Contributing for the full development guide.

How do I add a new film preset?

See Adding a Film Preset.

How do I add a new language?

See Localization.

How do I add a new filter effect?

See Adding a Filter Effect.

Where is the filter processing code?

In src/filters/. Each effect is a self-contained module. See Filter Pipeline for an explanation of the processing order.


PWA & Offline Use

Can I install GrainLab as an app?

Yes. GrainLab is a Progressive Web App (PWA) and can be installed on any platform:

  • Desktop (Chrome / Edge): click the install icon (⊕) in the address bar.
  • Android: tap Add to Home Screen from the browser menu.
  • iOS (Safari): tap Share → Add to Home Screen.

Once installed, it opens in its own window without browser chrome, just like a native app.

Does GrainLab work offline?

Yes. After the first visit, all app assets (JS, CSS, images) are cached by the service worker. You can open and use GrainLab with no internet connection. Your gallery is stored in IndexedDB on-device, so your images are always available offline.

How does the app update?

The service worker uses autoUpdate mode. When a new version is deployed, the service worker updates itself silently in the background. The new version is active the next time you reload or reopen the app — no manual action needed.

The app seems stuck on an old version. What do I do?

  1. Close all GrainLab tabs/windows.
  2. Reopen the app — the updated service worker should now be active.
  3. If still stale, open DevTools → Application → Service Workers → click Unregister, then reload.

Clone this wiki locally