Plate I · Joel

Plate 0 · the family

In one room Joel presses light through a negative and the print exists — latent, invisible — until the chemistry agrees to show it. In the other he presses source through a toolchain and the program exists — latent, invisible — until the tests agree to show it. Same posture in both rooms: trust the process, count the seconds, and keep the lights off until the image is fixed.

f/8 1/125 ISO 400 HEAD a41f2c9 branch main paper: fiber, glossy printed by: J. DEFFNER safelight: on

I.2

Joel’s vocabulary

One language, two rooms. Every term Joel uses on the left has always meant the term on the right — he never noticed he was learning two trades.

terminal
darkroom
Two rooms entered alone, each lit by one small lamp — a cursor, a safelight.
REPL
test strip
Ask a small question, read the answer, ask again. Never commit a full sheet to a guess.
refactor
re-crop
The negative does not change. Your judgment about its edges does.
overengineering
overexposure
Too many layers or too much light — either way, the detail drowns in black.
git tag
fixer bath
The deliberate chemical act of making a thing stop changing.

I.3

The print

One sheet, start to finish. Scroll and you make it with him: expose under the lamp, walk it through the trays, hang it on the line. The room stays red the whole time.

JOEL DEFFNER · session 41 · paper: fiber, glossy

I.4

The contact sheet

The rest of session 41, contact-printed as a diff against intention: every frame a commit, most of them reverted. Blank paper goes into the tray; keep scrolling and the frames come up in the order Joel exposed them.

TRI-X 400 · f/5.6 · JD
expose(frame, guess)expose(frame, meter.read())develop(t=6 * 60)agitate(every=30)
ISO 400 · branch meter · +2 −1
f/2 · light leak, kept · JD
crop(scene.everything)crop(scene.what_matters)
refactor/crop · f/8 · merged
developer 1+9 · 20°C · JD
# TODO: fix laterfix(print, t=5 * 60)wash(t=30 * 60)
joel@darkroom:~$ git tag v1.0

I.5

The exposure knob

Same frame, five exposures — but the timer is yours now. Drag the knob through Joel’s half-stop detents and read the verdicts he logged like commits. Two were kept.

basetagged v1.0KEPT

joel@darkroom:~$ expose --stop=0

drag the knob · half-stop detents · arrow keys work too

I.6

Joel’s five rules

Taped above the sink, in grease pencil. In both rooms the hard part is not making the image appear — it is making it stop changing.

  1. Work half-blind.

    The image is latent long before it is visible. In the tray and in the build, the worst mistake is turning on the lights early because you could not stand not knowing.

  2. Underexpose your ego.

    A good print never announces its enlarger settings; a good system never announces its architecture. If the viewer notices the technique before the image, expose less of yourself.

  3. Iterate in strips.

    Never spend a full sheet answering a question a strip can answer. Never spend a sprint answering a question a REPL can answer. The unit of doubt should be cheap.

  4. Ship the print, keep the negative.

    What hangs on the wall is a release. What lives in the binder is source. Frame the first, archive the second, and never confuse which one is precious.

  5. Make it stop changing.

    Fixer and a version tag do the same work: they end development on purpose. A print left in developer goes black. A codebase left improving does too. Fix it. Wash it. Hang it. Tag it.