Skip to content
Voro
  1. Image
  2. Effects

Darkroom

Example Built with Kernel FX Ships with Voro as an example. It may change between versions.

Darkroom treats the image as an exposure that passes through film development and printing. Stock and Format change its response. Grain, halation and gate movement follow the size of the simulated film.

Place Darkroom under Effects in the Image view and connect a picture to image. Choose Stock and Format first, then set Exposure. Adjust the printing lights after the exposure gives you the highlight and shadow response you want.

Keep Tap on Print for the finished image. Negative and Exposure show earlier steps in the treatment.

  • image supplies the main exposure.
  • mask increases local wear through Mask Damage.
  • bipack supplies a second image for printing together with the first.
  • out is the selected print, negative or exposure view.
  • Stock selects colour negative, reversal or black and white.
  • Format sets film size. Scan sets capture detail independently of output resolution.
  • Exposure is in stops. ISO affects grain size, while Granularity sets its strength.
  • Halation adds light spreading through the film base. Scatter Distance sets its reach.
  • Printer Red, Green and Blue adjust printing light. Raising Printer Red makes the print less red.
  • Bipack sets the amount of the second image. Bipack Mode selects a dissolve, double exposure, matte or negative treatment.
  • Wear scales the gate damage controls, including weave, dirt and scratches.

Small film formats make the same physical grain and registration errors more visible. Lower Auto Printer when you want exposure changes to remain visible instead of being partly corrected by automatic print metering.

Inputs

  • image image required
    RGBA
  • mask image
    single channel
  • bipack image
    RGBA

Outputs

  • out image
    RGBA

Film

Mix (Mix) Float op('darkroom').par.Mix

Blend the source to the finished film print.

Default:
1
Range:
0 to 1
Stock (Stock) Menu op('darkroom').par.Stock

Colour negative is printed onto a positive stock. Reversal is the original, so it is the projected image and it clips instead of rolling off. Black and white is one panchromatic layer.

Default:
negative
Options:
negative, reversal, bw
Format (Format) Menu op('darkroom').par.Format

Picture width on the film in millimetres. Everything physical - grain, halation, gate weave, scratches - is measured in microns on the negative, so a small format is grainier and less steady without changing a single control.

Default:
35mm
Options:
super8, 16mm, super16, 35mm, 65mm
Scan (Scan) Menu op('darkroom').par.Scan

Resolution the negative is scanned at, independent of the output resolution. It sets what the scan can resolve: picture detail and grain finer than one scan sample average away.

Default:
4K
Options:
2K, 4K, 6K
Generation (Generation) Float op('darkroom').par.Generation

Printing trips: camera negative, interpositive, internegative, release print. Contrast multiplies per trip and grain accumulates; the stock's own toe and shoulder are what bound it. Fractional values are partial trips.

Default:
2
Range:
0 to 6
Exposure (Exposure) Float op('darkroom').par.Exposure

Camera exposure in stops. The negative has latitude; overexposure lands on the shoulder rather than clipping.

Default:
0
Range:
-4 to 4
Tap (Tap) Menu op('darkroom').par.Tap

Finished print, developed negative with its orange mask, or the latent exposure before development.

Default:
print
Options:
print, negative, exposure

Emulsion

Highlight Headroom (Highlights) Float op('darkroom').par.Highlights

Restores light above display white before exposure, so clipped practicals can drive substantial halation and film shoulder response.

Default:
2.5
Range:
0 to 12
ISO (Iso) Int op('darkroom').par.Iso

Film speed. Faster stock is faster because its crystals are larger, so this sets grain size in microns - it is not a grain slider.

Default:
500
Range:
25 to 3200
Granularity (Grain) Float op('darkroom').par.Grain

Amplitude of the crystal population's density fluctuation. 0 is a perfectly clean emulsion; size still comes from ISO and Format.

Default:
1
Range:
0 to 2.5
Negative Gamma (Contrast) Float op('darkroom').par.Contrast

Slope of the negative's characteristic curve. High gamma fits fewer stops on the film.

Default:
1
Range:
0.3 to 2.5
Toe (Toe) Float op('darkroom').par.Toe

Length of the curve's shadow foot. A long toe keeps shadow detail and softens it.

Default:
0.2
Range:
0.02 to 0.7
Shoulder (Shoulder) Float op('darkroom').par.Shoulder

Length of the curve's highlight rolloff. This is why film does not clip.

Default:
0.26
Range:
0.02 to 0.7
Stock Age (Age) Float op('darkroom').par.Age

Fogged, aged stock: Dmax falls, the layers lose speed at different rates so the shadows cross to one colour the printer cannot remove, and base fog adds grain that has nothing to do with the picture.

Default:
0
Range:
0 to 1
Halation (Halation) Float op('darkroom').par.Halation

Light that passes the emulsion, reflects off the base and returns. It comes back into the red-sensitive layer, so the halo prints red without anything here choosing a colour.

Default:
0.5
Range:
0 to 2
Scatter Distance (Halationum) Float op('darkroom').par.Halationum

How far that light travels inside the base, in microns. Fixed on the negative, so it is a wider halo on a small format.

Default:
70
Range:
5 to 500
Layer Separation (Layerseparation) Float op('darkroom').par.Layerseparation

Development couplers released in one colour layer inhibit its neighbours, increasing colour separation without applying a saturation grade.

Default:
0.6
Range:
0 to 1.5
Push (Push) Float op('darkroom').par.Push

Rate the stock faster and develop longer. Contrast and grain rise, fog rises, and the shadows that fell off the toe do not come back - which is what pushing actually costs.

Default:
0
Range:
-2 to 3
Edge Acutance (Sharpness) Float op('darkroom').par.Sharpness

Development byproducts diffusing out of a dense area inhibit development beside it. Edges gain a light and dark Mackie-line rim and read sharper.

Default:
0.7
Range:
0 to 2.5
Bromide Diffusion (Adjacencyum) Float op('darkroom').par.Adjacencyum

How far the edge-forming development byproducts travel, in microns on the negative.

Default:
26
Range:
2 to 300
Developer Exhaustion (Exhaustion) Float op('darkroom').par.Exhaustion

A heavily exposed neighbourhood uses up the developer around it, so large bright areas develop less than a small bright one does.

Default:
0.5
Range:
0 to 1.5
Bleach Bypass (Bleachbypass) Float op('darkroom').par.Bleachbypass

Skip the bleach and retain developed silver beside the dyes: contrast rises and saturation falls from the same material.

Default:
0
Range:
0 to 1

Print

Printer Red (Printred) Float op('darkroom').par.Printred

Red printing light in points. 12 points is one stop. More light means more print density, so a higher number prints LESS red - the lab convention.

Default:
25
Range:
0 to 50
Printer Green (Printgreen) Float op('darkroom').par.Printgreen

Green printing light in points.

Default:
25
Range:
0 to 50
Printer Blue (Printblue) Float op('darkroom').par.Printblue

Blue printing light in points.

Default:
25
Range:
0 to 50
Auto Printer (Autoprint) Float op('darkroom').par.Autoprint

How much authority the printer's own meter has over the three lights. It measures the previous frame, so the print breathes across a cut as a real one does; at 1 it fully normalises every scene to the same mid grey and your exposure stops meaning anything, so it lives below that.

Default:
0.45
Range:
0 to 1
Print Gamma (Printcontrast) Float op('darkroom').par.Printcontrast

Print stock gamma, density per decade of printing exposure. Around 2.6 is a release print; it multiplies the negative's 0.6, which is why a print has so much less latitude than the negative it came from.

Default:
2.6
Range:
0.8 to 6
Bipack (Bipack) Float op('darkroom').par.Bipack

Amount of the second element in the printer.

Default:
0
Range:
0 to 1
Bipack Mode (Bipackmode) Menu op('darkroom').par.Bipackmode

Dissolve cross-fades the two elements' light. Double adds both exposures onto one frame. Matte holds one out with the other's luminance. Negative runs the second element inverted, as bipack printing does.

Default:
double
Options:
dissolve, double, matte, negative
Bipack Exposure (Bipackexp) Float op('darkroom').par.Bipackexp

The second element's exposure in stops.

Default:
0
Range:
-4 to 4

Gate

Wear (Wear) Float op('darkroom').par.Wear

Master amount for the physical Gate controls. Zero is a fresh print in a clean gate.

Default:
0.35
Range:
0 to 1
Gate Weave (Weave) Float op('darkroom').par.Weave

Registration error in the gate, in microns. Fixed on the film, so a small format weaves visibly more.

Default:
0.35
Range:
0 to 1
Gate Breathe (Breathe) Float op('darkroom').par.Breathe

The film sitting proud of the gate and settling back: a slow scale pulse.

Default:
0.3
Range:
0 to 1
Dirt (Dirt) Float op('darkroom').par.Dirt

Dust and hairs in the gate. It sits still for a few frames at a time - a cel - and it is on the film, so it weaves with the picture. On a print it comes from the negative, so it prints white.

Default:
0.3
Range:
0 to 1
Scratches (Scratch) Float op('darkroom').par.Scratch

Rails in the gate cut the film as it runs. They are fixed in the gate, so they stand still while the picture weaves past them.

Default:
0.25
Range:
0 to 1
Splices (Splice) Float op('darkroom').par.Splice

Tape joins running through: a bar, a lost frame of registration and a stain.

Default:
0.15
Range:
0 to 1
Misframe (Frameline) Float op('darkroom').par.Frameline

The gate riding off the frame line, so the join between frames creeps into the picture.

Default:
0
Range:
0 to 1
Mask Damage (Maskgain) Float op('darkroom').par.Maskgain

How much the mask input adds to local wear.

Default:
0.6
Range:
0 to 2
Seed (Seed) Int op('darkroom').par.Seed

Print identity. Same seed and time reproduce the same dirt, scratches and grain.

Default:
11
Range:
0 to 99999