Film35Lab transforms your digital photos into analog masterpieces — with the warmth, grain, halation, and soul of real film stock. All on your device. Instantly.
Stories, techniques, and new Film Simulation presets — straight from the Film35 blog.
Each category is a distinct photographic world — from the timeless warmth of signature film stocks to the haunting glow of infrared. Every preset is individually crafted with a unique combination of up to 12 analog parameters.
The heart of Film35Lab. Twelve presets spanning warm golden daylight to cool cinematic blues — each a distinct photographic identity inspired by legendary film stocks from around the world.
12 presetsLifted shadows, gentle contrast compression, and fine-tuned skin-tone warmth. These presets were designed to flatter the human face — soft, luminous, and never clinical.
12 presetsCool mid-tones, tight grain, and a muted tonal range that makes every frame feel like it was shot on a battered 35mm walking the city at dusk. Decisive. Gritty. Honest.
12 presetsInspired by the colour science philosophies of great camera makers — each preset captures a different approach to rendering light: from clinical precision to lush, painterly warmth.
12 presetsThe bread and butter of analog photography. Warm tones, balanced contrast, and authentic grain that transforms an ordinary photo into something that feels decades older — in the best way.
12 presetsHigh saturation, punchy contrast, and shifted colour casts that make landscapes pop and street scenes sing. These presets don't whisper — they shout.
12 presetsDeep shadows, teal-orange colour grading, raised black floors, and the characteristic widescreen feel of motion picture stock. Every photo becomes a still from a film that hasn't been made yet.
12 presetsBlack and white done right. Not a simple desaturation — each Mono preset uses individual channel weighting to control how colours translate into grey tones, from bright open prints to deep contrasty darkroom drama.
12 presetsEmulating the beautiful unpredictability of instant film — slight colour shifts, lifted shadows with a dreamy fade, and that unmistakable square-format warmth that makes memories look like memories.
12 presetsWarm ochre tones, faded contrast, and a softness that makes your photo feel like it was found in an old leather suitcase. Timeless. Nostalgic. A little melancholy.
12 presetsThe aesthetics of found photography — colour shifts from chemical breakdown, uneven fading, and a dreamlike quality that suggests the image has been through things you haven't. Each preset tells a different story of decay.
12 presetsColour drift, base fog, reduced saturation with strange hue shifts — the happy chaos of shooting expired stock. These presets capture the unpredictable magic that happens when chemistry breaks down beautifully.
12 presetsEach Golden Hour preset is a golden version of its Signature counterpart — same DNA, but with pushed temperature, stronger halation blooms, and warm highlight glow that makes the world feel like it's on fire. In the best way.
12 presetsRestrained. Honest. These presets sit at the intersection of documentary photojournalism and fine art — minimal colour manipulation, natural grain, and a tonal range that preserves information without sentiment.
12 presetsReversal film was the professional standard for decades — vivid colours, deep blacks, and zero room for error. These presets capture the confidence and precision of shooting slide, where every frame counted.
12 presetsWhat happens when you develop slide film in negative chemistry — or vice versa? Wild colour casts, blocked shadows, blown highlights, and a chaotic energy that defined the alternative photography era of the 1990s.
12 presetsPushing film beyond its rated speed yields shadow detail loss, increased grain, and a gritty high-contrast look beloved by available-light photographers. Dark, deep, and intensely atmospheric.
12 presetsInfrared film records light invisible to the human eye — foliage turns white, skies go dark, and the world becomes a ghostly negative of itself. Ethereal, surreal, and unlike anything else in photography.
12 presetsSimulates the full C-41 negative-to-positive inversion pipeline — colour masking, punch matrix, and saturation boost all modelled after real darkroom chemistry. From neutral true-colour scans to warm vintage pulls, each preset is a different interpretation of what the negative was always trying to say.
13 presetsTap any control icon to expand a precision slider. Haptic feedback pulses at the neutral point — so you always feel exactly where you are. The icon row scrolls horizontally so every control stays within reach. Switching presets resets everything to zero.
"A dot below the icon tells the whole story — orange dot means active, white dot means you've adjusted it, no dot means it's untouched. Your eye knows immediately where you've been — and where you haven't."
Each preset is not a filter — it's a complete photographic specification. Twelve independent parameters define how every photon of light is transformed. Here's how it actually works.
| Parameter | What it does | Film Analogue |
|---|---|---|
| temperature | Shifts colour balance warm or cool by scaling red and blue channel translations | Colour temperature of the light source / film chemistry bias |
| saturation | Controls the ratio of identity matrix to preset colour matrix during blending | Dye density in the emulsion layers |
| contrast | Scales the RGB diagonal of the colour matrix with a midpoint offset to prevent clipping | Development time and gamma curve of the stock |
| fade | Adds a constant positive offset to shadow translations, lifting the black floor | Age-related base fog and silver oxidation |
| grain | Controls the intensity of per-pixel luminance noise added at render time | Silver halide crystal size and density |
| halation | Simulates light bleeding from bright areas into shadow borders via a blurred highlight mask | Light scattering through the film base / anti-halation layer |
| bloom | Adds a soft glow to highlight regions — a wider, lower-contrast version of halation | Lens flare, coatings, and highlight bloom on fast emulsions |
| wbRed / wbBlue | Independent fine-tuning of red and blue channels as translation offsets, separate from temperature | White balance shift from mixed lighting or scanning colour |
| shadowBiasBlue | Raises only the blue channel in shadows, creating a cool-shadow / warm-highlight split tone | Shadow colour cast from developer chemistry or cross-processing |
| highlights | Compresses highlight values toward white, simulating shoulder roll-off on the film's H&D curve | The gentle clipping at the top of a film stock's dynamic range |
Every preset is stored as a 20-element float array — a 4×5 colour matrix applied via Android's ColorMatrix API. This is the same approach used by professional colour grading pipelines.
At runtime, Film35Lab interpolates linearly between the identity matrix and each preset's matrix using the Intensity value. This means you can dial in any blend between "no effect" and "full preset" — and stacking adjustments on top is just additional matrix arithmetic, applied in a single GPU pass.
When you select a preset or drag a slider, this is what happens — in real time, frame by frame:
Highlighted stages are recomputed on every slider move. The full pipeline runs in under 16ms on modern Android hardware, maintaining 60fps live preview.
Intensity blending, exposure (2EV scaling), contrast (diagonal scaling + midpoint offset), fade (shadow lift), and warmth (red/blue translation) are all composed into a single 4×5 matrix before hitting the GPU. Zero redundant passes.
The Exposure slider applies 2^stops scaling to the RGB diagonal — the same model used by RAW processors. ±2 EV maps to a ×0.25 to ×4 multiplier, which is perceptually linear to the human eye.
Each grain layer uses luminance-weighted noise — brighter areas get less grain than shadows, exactly like real silver halide. Grain intensity is pre-parameterised per preset, so a pushed process looks different from a fine-grain portrait stock.
Halation simulates light scattering through a film base by extracting a highlight mask and applying a blurred, colour-shifted version back into the image. Bloom is the same idea at a wider radius and lower opacity — the two create a layered glow that no simple filter can replicate.
INTENSITY, EXPOSURE, CONTRAST, HIGHLIGHTS, SHADOWS, SATURATION, WARMTH, and TINT all fire a HapticFeedbackConstants.CLOCK_TICK pulse the moment you cross the neutral point. You feel the default — you don't have to look for it.
Film35Lab is built entirely in Jetpack Compose with state hoisted at the screen level. Preset state, adjustments, and the active control are all mutableStateOf — meaning the UI re-composes only the nodes that need updating. No XML layouts. No manual invalidation.
A one-time purchase unlocks the complete Film35Lab collection — every preset, every category, every future update in the current version series.
Download Film35Lab on Google Play. One purchase. Every preset. Every photo.
Get Film35Lab on Google Play