← Work

Caffenol

A photo editor you can get wrong

Accession
CS_005
Filed
2026.07.26
Client
Personal Project
Extent
2 min,318 words
Subject
Design,Interaction Design,WebGPU
The Caffenol darkroom bench on a MacBook: light table, film cassettes, developing tank, and enlarger
The bench

Caffenol is a darkroom toy. You load a photo, develop it into a negative in a simulated tank, then print it under a timed enlarger exposure, dodging and burning by hand. It runs in the browser on raw WebGPU.

The premise

Film simulation usually ships as a preset. Pick a name off a list and the look is applied, the same way every time. All the decisions that make darkroom work interesting have already been made by someone else.

Caffenol simulates the process instead of the look. Stock, developer, dilution, temperature, agitation, and the moment you pull the roll each move the result, and none of them can be undone. You find out what you have when the negative comes out of the tank.

The experiment

The chemistry is a real simulation: coupled density and activity fields model exhaustion, diffusion, bromide drag, and agitation, with the characteristic curve shared between TypeScript and WGSL.

The tank, mid-soak

Every second changes the result. Going short risks and underdeveloped negative, and too long can create harsh effects. Redeveloping is easy.

Organic results

Defects are legal. Skip the stop bath and the developer keeps working, so you get streaks. Skip the wash and you get bubble spots. Shock a warm emulsion with cold chemistry and it reticulates. The panel tells you the cost up front, then lets it happen. A defect you chose on purpose is a creative decision.

The enlarger, mid-exposure

Each stage has an element of randomness, creating subtle and chaotic variations between prints, much like darkroom printing. Without the paper waste.