The manual

Documentation

Everything you need to get FilmBench running and turning negatives into finished photographs. If you get stuck anywhere, there's a real person at the other end. See the bottom of this page.

Start here

Getting started: your first roll

What is FilmBench?

FilmBench turns your computer into a living darkroom. Tether a camera, point it at a film negative, and FilmBench shows you the finished photograph in real time: colours true, the orange mask gone, the image already developed. No scanning, no inverting in another app afterwards.

This is the whole workflow, end to end. Wherever a control is named it's shown as the chip you'll tap in the app, like Portra , and each step links to the reference sections below for the fine print.

What you'll need

  • A Mac (Apple Silicon, macOS 12 Monterey or newer), a 64-bit Windows 10 or 11 PC, or a 64-bit Linux machine (x86-64 or ARM64). FilmBench ships as a DMG for macOS, an installer for Windows, and a .deb or .rpm package for Linux.
  • A camera that shoots tethered over USB and is on the libgphoto2 supported list, hundreds of models from every major manufacturer.
  • A copy stand or tripod and an even, neutral backlight behind the negative: a light table or a daylight-balanced panel works well.

Step by step

  1. Connect and frame. Plug the camera in over USB, switch it on, and open FilmBench. It finds the camera and opens a live, lag-free view; the status dot beside the camera name goes green when it's ready. Lay the negative on your copy stand over an even backlight and square it up: turn on the grid to line up the film edges, focus peaking to lock focus on the grain, and 1:1 to pixel-peep. More: the window, part by part.

    Heads up: on macOS you don't need to quit Photos or Image Capture just because they're open. FilmBench talks to the camera through Apple's own imaging framework, so it shares rather than competes with the system. Only an app actively holding a session on the camera blocks it, like EOS Utility, Lightroom or Capture One mid-tether, and the startup screen spots those and offers to close them for you. See camera isn't detected.

  2. Choose how you preview. The LIV chip picks how the viewfinder feeds you: None (the raw frame), Live View (the camera streamed continuously, already inverted and graded, your loupe for framing and focus), or Single Shot.

    Heads up: Single Shot freezes one full-resolution frame in memory so you can tune against exactly what the camera sees; it does not save anything. You still press the shutter to capture.

  3. Tag the film. Tell FilmBench what you shot: for the stock, for the process (C-41, E-6 or black & white), for the developer. These are written into the file's metadata as a record of the original; they're not applied as a look. More: how the EXIF metadata works.

    Heads up: long-press the Film chip to auto-detect the process from the frame's rebate, but it only works with Live View on.

  4. Develop the look. Grade the positive live. The develop chips work the image as you drag them: +0.3 exposure, 1.05 contrast, 1.0 saturation and the rest, along with the inversion controls: the Log-density algorithm, the AUTO film base, and the channel nudges 1.80 +4 -3 . Two tools help you judge: the histogram: watch the IN plot (the negative) and hold its brightest tone just short of clipping so the inverted shadows keep detail, while the OUT plot shows your graded result; and the comparison wipe, a divider you drag across the frame to A/B the developed positive against the untouched Original or the bare Inversion only. More: every chip, explained.

    Heads up: to set the film base by hand, pick the eyedropper, tap the rebate in the next frame, then fine-tune hue, saturation and value and watch the preview shift live.

  5. Orient, crop and pick a format. Square the frame: 0° rotates a portrait negative upright, mirrors an emulsion-side copy, and the crop tools trim to the rebate. Set RAW to RAW for the most latitude when inverting.

    Heads up: AUTO crop live-follows the detected border but only locks in at capture; drag a corner to switch to CUSTOM and pin a specific box.

  6. Capture. Press the shutter button (or Space, even while a chip is focused). The frame is written straight to your output folder the instant you press it, with full EXIF, and lands in the capture strip. More: where files go, what formats are saved.
  7. Review, and carry the look across the roll. Each frame stacks in the capture strip, newest first. Open one in your system viewer, or reload its develop settings onto the bench to match a look down the roll. Strayed too far? reset snaps every develop chip back to the film's defaults (or double-tap Esc). More: the capture strip, keyboard navigation.

Installing

Download FilmBench from get.filmbench.app; the page offers the right build for the platform you're on.

macOS: open the DMG and drag FilmBench into Applications. Every build is signed and notarized, so macOS opens it without ceremony.

Windows: run the installer and follow the prompts. Builds are code-signed; if SmartScreen still warns on a fresh release, choose More info then Run anyway.

Linux: install the .deb (sudo apt install ./FilmBench-*.deb) or .rpm (sudo dnf install ./FilmBench-*.rpm).

Know your way around

The window, part by part

A live map of the FilmBench window. Hover or tap a number to see what each area does.

IN OUT FilmBench EOS 760D 50mm 62% 1453 ON FIT Portra C-41 ok prefs 400 1/250 f/8 Daylight LIV +0.3 1.05 1.0 0° -10 +10 0° 1 2 3 4 5 6

Hands on the keys

Keyboard navigation

Drive the whole chip strip without reaching for the mouse.

Move between chips

Click or tab onto any chip, then steer with the arrow keys. A focus ring shows where you are.

  • ← and → step to the previous and next chip, exactly like Shift+Tab and Tab. At the end of the title bar the focus flows on into the bottom row, so one direction walks every chip in order.
  • ↑ and ↓ jump between the two rows. Focus lands on the chip in the nearest column, and a run of up and down holds that column even when the rows line up differently.
  • Enter opens the focused chip's picker or toggles it, while Space always takes a frame, whichever chip is focused.

What it skips

Read-outs (lens, battery, shots left, GPU health) and any chip locked on the free tier are passed over, so the arrows only ever land on a control you can use. While a chip's picker is open the arrows drive that picker, a slider or a list, instead of moving between chips.

All shortcuts

Hold ? in the app at any time to pull up this same list as an overlay. The arrow keys above mirror Tab and Shift+Tab; everything else is here.

Camera

[
ISO step down
]
ISO step up
;
Shutter step slower
'
Shutter step faster
,
Aperture wider
.
Aperture narrower
-
Exposure comp down
=
Exposure comp up

Capture

Space
Take a frame, even while typing

Navigation

←
Previous chip
→
Next chip
↑
Row above
↓
Row below
Enter
Open or toggle the focused chip

Post-process

Esc Esc
Reset post-process chips (double-tap)

Help

?
Hold for the shortcuts overlay

Reference

Every chip, explained

The title bar and tool rows are a strip of chips. Tap one to change it; some open a slider or a picker. Here's the whole set, with the same colours they wear in the app.

Preferences

The settings window

Open settings from the prefs chip in the title bar. It's a tabbed window covering where files land, who shot them, the metadata stamped on every frame, and the catalogs behind the Film and Chemistry chips.

Storage

  • Output folder: where every capture is written. Leave it blank for the default, ~/Pictures/FilmBench.
  • History size: how many recent frames the capture strip remembers, from 1 to 200. Older frames fall off the back as you keep shooting.
  • Keep debug files: off by default. When on, the per-stage snapshots FilmBench writes during a capture are left in the output folder instead of being cleaned up, which helps when you're chasing a rendering problem.
  • Enable auto crop (experimental): off by default. Shows the CROP chip, which auto-discovers the film frame and can straighten a tilted scan. It's a work in progress, so the chip stays hidden and crop never applies until you switch this on.

Author

Three fields written straight into the saved file:

  • Photographer: your name, stored as the EXIF Artist and XMP Creator.
  • Lens: overrides the recorded lens, handy for noting the lens the original photo was shot on. Leave it blank and the digital camera's own lens stands (see below).
  • Notes: free text, stored as the image description.

How the EXIF metadata works

Two things end up in every saved file. First, because each frame is a genuine photograph your digital camera took, its technical EXIF rides along untouched: the lens and shutter speed come straight from the camera, along with the aperture, ISO and camera body, and FilmBench leaves them exactly as shot.

Second, FilmBench adds the notes about the analog original: the film stock and its ISO, the development process, the developer chemistry, the photographer, your notes and the capture orientation. Those come from the chips on the main window (Film, Process, Chemistry, Orientation) and the Author tab.

The key idea is that this is a record, not a recipe. Choosing Tri-X 400, black & white and HC-110 writes those facts into the file but never changes the conversion. Everything is stored in standard EXIF and XMP fields, so Lightroom, Capture One or any catalogue reads it like ordinary metadata, and the process choice also flags the file's source as a film scan.

Custom tags

The escape hatch: add any standard EXIF, IPTC or XMP tag, whether that's copyright, GPS, keywords or a roll number. Start typing and it suggests tags from a catalog; tags with a fixed set of values get a dropdown, and anything unrecognised is flagged in red before you save.

Films and Chemistry

Two catalogs that back the Film and Chemistry chips. Tick the stocks and developers you actually shoot so the pickers stay short, and add your own entries for anything off the beaten path.

Inversion (advanced)

Fine controls for how a negative becomes a positive. Each has a reset to its built-in default, and most people never need them:

  • Film-base top %: how much of the brightest red is sampled to find the orange film base on C-41. Lower samples a larger, dimmer area; higher uses only the brightest pixels. C-41 only.
  • Film-base border %: how far in from the edges of the frame the film base is looked for, so a bright warm subject in the middle of the scene can't be mistaken for the base. Raise it if your rebate is wide, or set 0 to search the whole frame. C-41 only.
  • Base percentile: the brightness treated as the film base, the white point, for black & white and for C-41 when orange detection fails.
  • Dmin percentile: the darkness treated as the densest point, the black point. The single biggest lever on contrast.
  • Base pick radius: how wide the film-base eyedropper averages around your tap, so grain and JPEG noise don't skew the pick. 0 samples a single pixel; 5 averages an 11×11 patch.

Calibration

Calibration is about your rig, not your look: measure it once and every frame benefits, no matter which film, chips or crop you use after. There are two, each with its own Apply correction tick so you can keep a measurement on file but turn its effect on and off without re-shooting.

  • Light source (flat-field): shoot one blank, evenly lit frame with the bare backlight and no negative in the holder. FilmBench learns how your light and lens fall off toward the edges and what colour the light is, then evens out that vignetting and neutralises the cast on every capture. Put the camera in Manual and pick your aperture; it shoots a test frame and sets the shutter speed itself to expose the white frame correctly, and tells you what to change if it can't. Re-shoot only if you move or refocus the rig. A contrast-enhanced map of what it measured is shown so you can see the unevenness it is correcting.
  • Live view colour: matches the live preview's colour and contrast to the developed RAW, so what you tune on screen is what lands in the file. Set the camera to the exposure, aperture and ISO you'll actually shoot at, frame a scene with a good spread of tones and colours, then calibrate: it takes a few RAW shots and live frames and fits a per-channel tone curve from the feed to the RAW. The curve only ever changes the preview; your saved files are untouched.

Setup, and using it to debug

The Setup tab is a live health check of the outside tools FilmBench leans on, the same check the startup splash runs. Each one shows green with its version and path when it's found, or red with an error when it isn't:

  • exiftool: writes the film metadata above into each saved file. It shows here on Windows only; on macOS and Linux the same job is built into FilmBench and runs in-process, so there's no row for it.
  • ImageMagick: the image conversion and processing workhorse.
  • dcraw_emu: decodes the RAW files coming off the camera.

Required tools must be present for conversion to work; optional ones just add extra features. So when a capture won't convert, the app won't move past the splash, or a frame comes out wrong, the Setup tab is the first place to look: the red row names exactly which dependency is missing or broken, with its error, so you know what to reinstall or fix.

When it snags

Troubleshooting

My camera isn't detected.
Check the USB cable and port (some cables are charge-only, so use a data cable). Make sure the camera is switched on and not asleep. Then check that no other app is holding a session on it: your camera maker's tethering utility (EOS Utility, NX Tether, Imaging Edge and the like), Lightroom or Capture One mid-tether. Quit those and reopen FilmBench. On Canon bodies with built-in Wi-Fi, the USB connection is switched off while Wi-Fi or NFC is enabled, so disable both in the camera's communication settings. Confirm your model is on the supported list.
The camera is detected, but every setting reads n/a and Live View won't start.
FilmBench sees the camera but is not talking to it. Two things cause this. Another program already holds the camera's control session, so quit tethering tools, webcam utilities (EOS Webcam Utility included) and photo importers, then unplug and replug the camera. Or, before version 1.2.4 on Windows, a card reader or USB drive plugged in at the same time was picked up as the camera instead of the real one. Update to 1.2.4 or later, or unplug the reader. If it still happens, take a Connection Diagnostics export within a minute of connecting the camera and send it to us. The report shows which device was opened and what the camera answered.
On Windows, which driver should the camera use?
The one Windows installs by itself. In Device Manager the camera appears as a portable device using the Microsoft MTP or PTP driver, and that is what FilmBench talks to. Do not replace it with WinUSB, libusb or Zadig. That breaks the camera for every other program and does not help FilmBench. If you installed a replacement driver while troubleshooting, uninstall it in Device Manager and let Windows reinstall the default. Canon's EOS Utility and EOS Webcam Utility, Nikon's NX Tether and Sony's Imaging Edge all hold the camera while they run, so close them before starting FilmBench. Windows Photos can also grab the camera when it offers to import, so dismiss that prompt or turn off its auto-import.
There's no live preview.
Live view has to be available on the camera itself, so make sure the lens cap is off and the camera isn't in a mode that disables live view. Reconnect the cable and reopen FilmBench. A camera that is busy writing a previous frame to its card can pause the preview briefly.
The preview doesn't quite match my final captures.
Expect it to differ. The live preview is a smaller, lower-resolution JPEG the camera streams for speed, with its own viewing settings, so it won't match your full-resolution captures pixel for pixel, and its brightness in particular can be off (see the exposure-simulation note below). For an exact match, switch the Preview chip to Single Shot: it freezes one real, full-resolution frame and you tune against precisely what the shutter will write. Otherwise judge fine detail and final colour from the saved files, not the live view.
The live preview is brighter than my saved photo.
This is exposure simulation, and it's the camera's behaviour rather than FilmBench's. In live view the camera streams a continuous feed at video rates and can't give each frame a real shutter exposure, so it estimates brightness from your exposure value and lifts the rest with digital gain. On many DSLRs that estimate runs bright and tops out, so the live feed looks lighter than the still the shutter actually records, while your saved files stay correct. If your camera offers Exposure Simulation (Canon), Setting Effect (Sony) or an exposure preview (Nikon), enabling it on the camera makes the feed track your real exposure. Cameras that don't expose it, including many entry-level DSLRs, can't be made accurate in live view by any software, so reach for Single Shot preview, which freezes one real, full-resolution frame to tune against. Either way the change is only to the viewfinder, never to the saved photo.
The colours look off, or the wrong process is detected.
These are two separate things. Auto-detect samples the film rebate when you long-press the Film chip, so an unusual crop or heavy backlight can fool it; if it tags the wrong process, set it by hand. That tag is only recorded as metadata, so it won't change the image either way. If the colours themselves look off, that's the light, not the tag: keep the backlight even and neutral behind the negative, match white balance to it, then fine-tune with the develop adjustments.
My RAW and JPEG of the same shot don't look the same.
This is expected, and neither file is wrong. The two come from different renderings of the negative. The JPEG is the picture your camera itself developed (its white balance and picture style baked in), inverted against the baseline you tuned in the live preview. The inverted TIFF that sits next to a RAW is built from the raw sensor data, decoded neutrally and auto-balanced from the frame, so its white balance and contrast are set independently. Because the two starting points differ, the same scene can land with a different colour cast (often the JPEG a touch warmer or greener, the TIFF cooler) and a slightly different brightness. For consistent results, settle on one format for a roll rather than mixing them, and do your final colour judgement from the saved files. The TIFF carries more latitude (it's 16-bit, straight from the RAW), so it's the better master if you plan to grade further; the JPEG is the quick, camera-matched positive that follows what you saw live. You can nudge either toward the other with the develop adjustments (white balance, brightness, contrast).
My captures aren't being saved.
Check the output folder in settings and make sure it still exists and isn't full or read-only. If it lives on an external drive, confirm the drive is mounted.
macOS won't let me open the app.
FilmBench builds are signed and notarized, so macOS should open them without complaint. If Gatekeeper still objects, right-click the app, choose Open, then confirm, and it stays cleared from then on.
Windows won't let me open the app.
Builds are code-signed, so Windows should run them without fuss. If SmartScreen shows a "Windows protected your PC" notice on a fresh release, click More info and then Run anyway.
The Linux package won't install.
Install with your distribution's package manager so dependencies are pulled in: sudo apt install ./FilmBench-*.deb on Debian and Ubuntu, or sudo dnf install ./FilmBench-*.rpm on Fedora and RHEL. Use the .deb on Debian-based systems and the .rpm on Red Hat-based ones.

When you need a hand

Capturing diagnostics for support

If a camera won't connect and the usual fixes don't help, the Connection Diagnostics window gathers everything we need to see what's happening, in one file you can send us. It never touches your photos.

Collect and send a report

  1. Open Connection Diagnostics. Click the chip in the title bar. (On macOS it's also under the FilmBench app menu, and on any camera-error dialog.)
  2. Reproduce the problem with the window open. It lists every camera the system hands over, the USB ids, and which driver each resolves to, and it records the live camera handshake the whole time it's open. Timing matters. The most useful lines are written in the first seconds after the camera connects, so if the trouble starts at connection, open this window first, then plug the camera in, and export within a minute.
  3. Click Export. Pick a location and it saves a .zip archive (a plain .txt is offered too).
  4. Email the file to [email protected] with a sentence about what you were doing and which camera.

What's in the report

  • The cameras detected, each with its USB vendor:product id and the driver it matched.
  • The backend connection log, including why a camera failed to bind.
  • The PTP handshake captured while the window was open, recording only the opening bytes of each camera message.

Because only the start of each message is logged, full photos and files never go into the report, and neither do your file paths or personal data. If the camera table is empty, the window names the app holding the camera (often a vendor tether tool or Photos) and offers to quit it for you.

Questions

FAQ

Which cameras are supported?
Any tethered camera libgphoto2 supports: hundreds of models from every major manufacturer. See the full list. That list says what the driver knows, not what we have sat behind ourselves. The body we develop and test on is the Canon EOS 750D, on macOS and Windows. Customers have run other Canon EOS bodies. If yours works, or doesn't, tell us at [email protected] and we will add it here.
Is this a replacement for a film scanner?
It's a faster, more immediate way to get there. Instead of scanning then inverting and correcting in another app, you see the finished photograph live as you shoot the negative on a copy stand.
Does it handle colour negative, slide and black & white?
Yes, colour negative (C-41), slide (E-6) and black & white. Pick the process yourself, or long-press the Film chip to auto-detect it from the current frame.
Where are my photos saved?
To the output folder you choose, the instant you press the shutter. Each capture is written straight to disk with its metadata.
What file formats does it save?
RAW, JPEG, or RAW + JPEG, whichever you choose. Set it once and every capture follows. A RAW capture also gets an inverted 16-bit TIFF written alongside it, so you have a finished positive without opening another app.
Why does the TIFF from a RAW look different from the JPEG?
Because they're two different renderings of the negative. The JPEG is your camera's own developed picture, inverted against the live baseline you tuned; the inverted TIFF is built neutrally from the raw sensor data and auto-balanced from the frame. Different starting points give a slightly different colour cast and brightness; both are valid. The TIFF is the higher-latitude 16-bit master; the JPEG matches what you saw live. There's more in Troubleshooting.
Does FilmBench need an internet connection?
No. FilmBench processes images locally and talks to your camera over a local connection.
What about my data and privacy?
FilmBench processes everything on your computer and collects no data. Your negatives and photos never leave your machine.
How much does it cost?
FilmBench is a one-time purchase, no subscription: a perpetual licence you can use on up to three of your machines. A 30-day free trial lets you try the full app first; see pricing for the current beta price.
What do I need to run it?
An Apple Silicon Mac (macOS 12 Monterey or later), a 64-bit Windows 10 or 11 PC, or a 64-bit Linux machine, plus a camera that can shoot tethered over USB and is on the libgphoto2 supported list.
Still stuck?
Email [email protected] and tell me what's happening. It's just me reading these, and I'd love to help you get it working.