-
Notifications
You must be signed in to change notification settings - Fork 0
User Guide
This guide covers everything you need to use GrainLab effectively — from loading your first image to exporting a finished batch.
You can import images in several ways:
- Drag and drop — drag one or more image files anywhere onto the canvas area.
-
Keyboard shortcut — press
Ctrl + O(macOS:⌘ + O) to open the system file picker. -
Film strip
+button — click the plus icon at the bottom of the screen to add more images to the gallery.
Supported formats: JPG · PNG · GIF · WebP · BMP · TIFF
If your gallery is empty when the app loads, a built-in example image is loaded automatically so you can start experimenting right away.
Open the Presets tab in the left panel. Eleven carefully crafted film simulations are available:
| Preset | Character |
|---|---|
| Kodak Portra 400 | Classic portrait film — warm tones, soft highlights, flattering skin |
| Kodak Gold 200 | Rich, warm, highly saturated — great for travel |
| Kodak Ektar 100 | Ultra-vivid colors, ultra-fine grain |
| Kodak Tri-X 400 | High-contrast black & white, coarse grain |
| Fuji Superia 400 | Fresh greens, balanced color, excellent skin tones |
| Fuji C200 | Cool and subdued, low contrast — Japanese film aesthetic |
| Fuji Velvia 50 | Extreme saturation, deep blues and greens |
| Fuji Eterna 500 | Cinematic, low saturation, soft shadow detail |
| Ilford HP5 Plus | Classic black & white with strong grain texture |
| CineStill 800T | Cool tungsten cast, distinctive red halation glow |
| Agfa Vista 200 | Warm vintage feel, magenta shadows |
Hover over a preset card to read its description. Click to apply it instantly to the current image.
Switch to the Adjustments tab to fine-tune each of the 8 independent effect layers.
Use the Simple / Advanced toggle at the top of the panel:
- Simple mode — shows primary sliders for each effect.
- Advanced mode — additionally reveals per-channel Color Toning Wheels (shadows, midtones, highlights) for fine-grained color control.
Controls the overall tonality of the image.
| Parameter | Range | Description |
|---|---|---|
| Exposure | −100 → +100 | Overall brightness |
| Temperature | −100 → +100 | Cool (blue) ↔ Warm (yellow) |
| Tint | −100 → +100 | Green ↔ Magenta |
| Saturation | −100 → +100 | Color intensity |
| Contrast | −100 → +100 | Tonal separation |
| Highlights | −100 → +100 | Brightest areas |
| Shadows | −100 → +100 | Darkest areas |
In Advanced mode, three RGB color pickers let you tint shadows, midtones, and highlights independently (each channel −50 → +50).
| Parameter | Range | Description |
|---|---|---|
| Intensity | 0 → 100 | How much grain is visible |
| Size | 1 → 3 | Grain particle size |
| Color Variance | 0 → 100 | Per-channel color noise (more = color grain) |
| Shadow Boost | 0 → 100 | Extra grain in shadow areas |
| Highlight Reduction | 0 → 100 | Suppresses grain in bright areas |
| Parameter | Range | Description |
|---|---|---|
| Intensity | 0 → 100 | How dark/light the edges become |
| Radius | 0.5 → 2.0 | Size of the clear center area |
| Feather | 0 → 100 | How gradually the vignette fades |
| Color | 0 → 100 | 0 = black vignette, 100 = white vignette |
| Parameter | Options | Description |
|---|---|---|
| Intensity | 0 → 100 | Strength of the leak |
| Color | Warm / Cool / Vintage | Tint of the light leak |
| Position | Top-Left / Top-Right / Bottom-Left / Bottom-Right | Corner where the leak originates |
| Parameter | Range | Description |
|---|---|---|
| Intensity | 0 → 100 | Lifts blacks to create a washed, vintage look |
| Parameter | Options | Description |
|---|---|---|
| Intensity | 0 → 100 | Glow strength in bright areas |
| Color | Red / Warm / Gold | Hue of the halation glow |
| Radius | 1 → 20 | Spread of the glow |
| Parameter | Range | Description |
|---|---|---|
| Intensity | 0 → 100 | Bloom strength |
| Threshold | 0 → 100 | Luminance level above which bloom is applied |
| Radius | 1 → 20 | Bloom spread |
A simplified 3-point spline that adjusts luminosity independently in three tonal zones.
| Parameter | Range | Description |
|---|---|---|
| Shadows | −50 → +50 | Lifts or crushes the dark end |
| Midtones | −50 → +50 | Brightens or darkens the mid-gray range |
| Highlights | −50 → +50 | Opens or clips bright areas |
Click the compare button in the toolbar (or the icon next to the zoom controls) to enter split-view mode. A draggable divider lets you reveal as much of the original or processed image as you like. Click again to exit.
- Click Export in the toolbar, or press
Ctrl + S(⌘ + S). - Choose the output format:
- JPEG — use the quality slider (1–100%). Lower values = smaller file.
- PNG — lossless, larger file.
- Click Download. The file is saved as
{original_name}_film.jpgor{original_name}_film.png.
- Open the Batch panel from the toolbar.
- Select the images from your gallery that you want to process.
- Choose a preset and an export format.
- Click Export All.
A film_batch.zip file is generated in your browser and downloaded, containing all processed images. Processing uses a Web Worker so the UI remains responsive during export.
The Film Strip at the bottom of the screen shows thumbnails of all loaded images (72×52 px, center-cropped).
- Click any thumbnail to make that image active.
- Click + to add more images.
- Click the ✕ on a thumbnail to remove that image from the gallery.
All images and their per-image parameter settings are automatically persisted to your browser's IndexedDB database (grainlab_gallery). They are restored the next time you open the app. Clearing your browser's site data will remove the gallery.
Current filter parameters are also saved to localStorage (grainlab_params) so your adjustments survive a page refresh.
| Shortcut | Action |
|---|---|
Ctrl + O |
Open / import image(s) |
Ctrl + S |
Export current image |
Ctrl + + |
Zoom in |
Ctrl + - |
Zoom out |
Ctrl + 0 |
Reset zoom to fit |
On macOS, substitute
⌘forCtrl.
GrainLab automatically detects your browser's language on first load. You can override it manually using the language selector in the top-right corner. Your choice is persisted to localStorage (lang).
Supported locales: en · zh-CN · zh-TW · ja · ko · fr · de · es · pt
Using GrainLab
Developer Docs