______ ___________________ ______ __
/ ____/ | / ____/ ____/ ____/ | / / __ \/ /
/ / / /| | / /_ / /_ / __/ / |/ / / / / /
/ /___/ ___ |/ __/ / __/ / /___/ /| / /_/ / /___
\____/_/ |_/_/ /_/ /_____/_/ |_/\____/_____/
Caffenol is a darkroom toy inspired by film development and darkroom creative processes. You load a photo, develop it into a negative in a simulated tank, then print that negative under a timed enlarger exposure, dodging and burning by hand with cut cards you physically wave over the paper. The process is slow, and every step can create a new result. The joy is in the doing, and the export is worth keeping, even if you don't get the right thing the first time.
There's no right way to use Caffenol, so bend and break the system to work for you.
The bench is a light table for importing your negatives or inspecting negatives you've already developed.
You have three ways in.
Accepted formats: JPEG, PNG, TIFF, and camera raw (DNG, CR2, CR3, NEF, ARW, RAF, ORF, RW2). Raw files load from their embedded preview. HEIC is not supported, and a raw with no embedded preview cannot be read, so export a JPEG in those cases.
A loaded photo is treated as a scene, hidden behind the cassette until you develop it. You do not see what is on the roll until it comes out of the tank.
Caffenol runs a quiet check on every upload. If your file looks like an already developed negative scan, it skips the tank entirely and lands on the glass, ready for the enlarger, since its chemistry happened elsewhere. If the check is unsure, your photo takes the normal path. When you know a scan slipped through as a scene, the tank offers an ALREADY A NEGATIVE escape hatch (uploads only, before you pour) that sends it straight under the lamp.
Your negatives are shown here.
The shelf survives reloads. Negatives and their print sessions persist in the browser's IndexedDB, so the library you build is still there tomorrow. To keep memory honest, only one working negative is held in full at a time. The rest of the shelf keeps just its small preview until you put it on the bench.
You build a recipe, pour, agitate (or not), and pull the film when you like. Development runs live and is cancellable at any instant.
The roll you shot on. Each stock owns its own characteristic curve (its contrast, its toe, its shoulder) and the grain that lives in its emulsion. The developer shapes that grain, but the film owns it, so any film paired with any developer gives a distinct texture. Step through the shelf with the prev and next keys, or swipe the window.
Black and white stocks, always available:
| STOCK | TRAIT | CHARACTER |
|---|---|---|
| HALO 250 | SOFT CINE GRAYS | Cinema stock. Long sweeping toe, gentle shoulder, silvery grays that never quite reach black. Rounded, handsome grain. |
| PRESS 400 | FORGIVING WORKHORSE | The reportage all rounder. Soft shoulder holds highlights forever, takes a push with grace. |
| FLEX 125 | SLOW, FINE GRAIN | Slow and fine, a touch more spine through the mids. Classic landscape and portrait polish. |
| MONO-X 400 | GRITTY STREET | Crunchy toe drops shadows fast, gritty assertive grain that loves an edge developer. |
| EURO 100 | FOGGY, SOFT COAT | Old world budget charm. Extra base fog, coarse lovable grain, a soft coat that mottles in the pour and crazes if you shock it. |
| MAXI 100 | SHARP, CLIPS HOT | Modern tabular grain, near grainless and razor sharp, but the hard shoulder clips. Sings only when exposed generously and developed short. |
| ORTHO 80 | BLIND TO RED | The old eyes: blind to red, generous to blue. Lips, brick and rust go black, skies go empty. Fine even grain. |
The color and slide stocks are a separate lab (see COLOR AND SLIDE below): MEADOW 160, CARNIVAL 400, VISTA 100, and the LANTERN 100 slide.
A note on ORTHO 80 and the color stocks: they see color, so their character only bites on a source that still carries color (your own upload, before it is baked). A negative already developed reads flat.
Choose between two developers:
Dilution alters the mix. Cutting the mix slows it, starves local exhaustion into stronger edge effects, sharpens the grain, and tames highlight contrast.
Stop bath and wash are toggles. Skipping a stage is allowed, and the panel tells you the cost before it bakes the defect into the negative:
Hotter developer works faster and coarser, colder runs slower and thinner. The chemistry follows a time and temperature law, so the CHART readout updates as you move the dial, estimating how long this recipe needs to reach full development. The TEMPER mark is the process base: release the fader within a degree of it and the knob seats with a click. Coarse pointers get whole degree nudge keys.
Stray too far from the base and you shock the emulsion. A warm coat hit with a cold bath crazes into a vein network (reticulation). The faceplate prints the danger bands in safelight red before the alarm fires:
Hardened modern coats mostly shrug reticulation off. The soft coats (EURO 100 above all) wear it openly, which is exactly why a shocked EURO 100 is a promising accident rather than ruin.
The temperature scale follows the loaded stock's process. Black and white tempers around room temperature (base 68 F, roughly 62 to 86). The color processes run hot and narrow around their own base, which is honest to how temperamental color chemistry is.
TIME-LAPSE ×8 runs the soak at eight times speed when you are impatient. It stays reachable mid soak, because the wait is the whole point of choosing when to pull.
Pour with POUR AND START. The negative reveals under safelight as it develops. Now the two levers that matter:
Every negative also inherits a slight pour unevenness (a faint per negative mottle) and, on a seeded minority, drying marks where the final rinse pooled.
The stock decides the process:
When the negative is fixed, the amber key carries it forward: TO ENLARGER for a negative, TO LIGHT TABLE for a slide. DEVELOP AGAIN rebuilds the recipe from scratch.
You project the negative onto paper under a timed exposure, and you shape the light by hand. One rule generates dodging, burning, and soft edges: light accumulates on the paper every frame, a dodge card withholds it (that area prints lighter), a burn card's hole adds it (that area prints darker), and at stop the accumulated exposure is mapped through the paper curve into a positive.
The box the sheet comes from: the material itself, its base tone, how deep its blacks reach, its sheen under the room lights, and the tooth of its surface.
| BOX | TRAIT | CHARACTER |
|---|---|---|
| Test Print | INK BLACKS, WET SHEEN | The modern trade sheet. Coldest, deepest, near textureless. A print taken at its word. |
| Christmas Gift | MATTE, VELVET GRAYS | Velvet diffuse. No glare, no favorites, blacks that stop short and do not apologize. |
| Gallery | WARM BASE, TOOTHY | The gallery classic. Warm bone base, brown black depths, an air dried fiber tooth you can feel with your eyes. |
| Book | COLD TONE, STEEL BLACKS | Old bromide manners. Steel blue blacks on a cool base, matte leaning fiber with a fine visible grain. |
Two more boxes live in the color lab (see below): the Postcard RA-4 color sheet and the Slide Print direct positive sheet.
The grade is a contrast number, 0 soft to 5 hard, the multigrade ladder. Low grades open the tonal range and hold detail everywhere, high grades crush toward pure black and white. A thin, under developed negative usually wants a higher grade to find its snap. A dense, over cooked negative wants a lower one.
Rotate the sheet under the lens, plus or minus 45 degrees, with 0 detented. A tilted horizon fixed here, or a deliberate lean, is baked into the print.
Below the angle sits the baseboard, a plan view of the easel. The dashed rectangle is the picture the lens throws and it never moves. The pale rectangle is your paper. Push the paper around under the beam, up to half a frame in any direction, and let go near the middle to seat it back square. This is the slidable easel, not a crop: nothing is trimmed, the picture simply lands somewhere else on the sheet. Whatever you slide out past the edge of the beam receives no light at all and comes out as bare white paper, which is either a mistake or a border, depending on whether you meant it.
Turn the lamp on while you slide and the projection follows exactly what the paper will get. Slide during an exposure and the sheet smears, the same way turning it mid exposure does.
Four blades come in from the edges of the sheet, and they are what crops the print. Every sheet has a thin rim already, because the blades have to sit on the paper to hold it flat. Steel stops light, so whatever a blade covers stays bare white paper, and the border widens on that side.
You wind the blades on the sheet itself, out on the safelight, where the picture is big enough to aim at. They lie over the paper as four black bars, overlapping at the corners the way real steel does, and what they cover is what stays bare. Take hold of a blade anywhere along it and push it in, up to a third of the frame. A dodge or burn card lying over a blade keeps the grab, because the card is on top of the paper. The baseboard in the panel follows along as you work, so you can see where the paper sits and what the blades left without looking away from the sheet.
RESET under the baseboard puts the whole easel back: square, centered, blades wide open. It lights up only once something has moved, so it doubles as a quiet way of telling you the easel is no longer where it started.
Turn the lamp on and crop against the beam: the blades keep moving, which is what the focusing lamp is for. They hold only once the exposure is running, because from then on the blade that shaped the light has to stay where it was. The turn and the slide never hold at all, since smearing the sheet mid exposure is something you are allowed to want.
Bare paper is bare. Nothing landed on the border, so nothing shows there: no tooth, no fiber, just the stock's own white. The texture of the sheet belongs under the picture, not in an empty margin.
The focometer key row runs the exposure: time down, lamp, expose or stop, time up.
This is the reason the toy exists. During the exposure window you wave physical cut cards over the paper.
Every card's whole path (time, position, speed) is recorded, so a print session is reproducible and replayable. CLEAR CARDS removes them all.
On a phone the cards live in the console drawer, and the CLOSE CUT and SCRAP IT keys dock on the stage where the corners actually land.
When the sheet is developed, the room lights come up and the print is fixed. Nothing in the panel changes it now. Two actions sit on the bench beside it:
Below the keys, a quiet SCRAP IT chip states that this sheet missed. It is the judgment only: the print stays on the easel and can still be exported, and pressing the lit chip again takes it back. A scrapped sheet asks WHAT MISSED? so the answer can point at the fix.
Color is a lab that is still being tuned, so it is gated. In a local dev build
it is always on. On a deployed build, add ?color to the URL to open it. When
it is on, the color film stocks join the FILM shelf and the color paper boxes
join the PAPER shelf, and the enlarger grows a HEAD module.
The head switches between two modules, and the switch is the only gateway to cross process printing.
The dichroic head is dual purpose:
Color paper isn't particularly fun to watch, so the machine puts on its own show: the print lays in dye passes, CYAN PASS, MAGENTA PASS, YELLOW PASS, and the fix brings the depth.
A small amber monitor sits in the wall at the bottom right: Ansel, the printer who came with the building. He has run this darkroom since before you were born and made most of your mistakes first. He respects the work more than the result.
He speaks when you summon him (one greeting), when you poke his face, and when your recipe or your result genuinely warrants a word: a wild temperature delta, a bold push, a blown exposure, a promising accident, a print worth the paper. On a browser's very first session he also walks you through the core loop once, one line per first time moment, and then retires that guide for good.
OFF dismisses him and leaves a CALL button, and the preference sticks per browser.
| INPUT | WHAT IT DOES |
|---|---|
| Click or tap corners | Place a dodge or burn card's corners |
| Enter | Close the current cut |
| Escape | Abandon the current cut |
| Click the first corner | Also closes the cut |
| Hold HOLD TO AGITATE | Agitate the tank while held |
| Shake the device | Agitate, where motion is offered |
| Drag a dial window | Spin a dichroic filter counter |
| Drag a negative | Rearrange it on the light table |
| Click a contact sheet | Lift the whole sheet to the light, and lay it down |
| Drag to a dock | Carry a roll to the tank, a negative to the enlarger |
| Swipe the shelf window | Step through films, papers, or grades |
Backtick (`) |
Toggle the hidden tuning panel (power users) |