I’m posting this here because I’ve seen how hit-or-miss people’s results can be. Many of the problems attributed to NLP, or to the scanning setup, actually begin with inconsistent development.
As someone who owns and operates a film lab, that’s what I want to address here: the chemistry and practice of C-41 development. This post is specifically about understanding its variables, controlling them independently, and getting consistent results when developing by hand at home.
I’m not covering scanning or conversion in this post. If you’d like a separate discussion about home scanning, how it compares with lab scanners, and the practices I use to get dependable results, leave a comment, I’d be happy to expand on that too.
GOOD DEVELOPMENT IS OBJECTIVE [bad is still subjective]
C-41 is a standardized, tolerance-based process. There are numerous variables, and each needs to be controlled precisely. A small deviation in one may make very little difference, but small deviations throughout the process can add up to something substantially out of spec.
The goal is to bring each variable within its intended tolerance, not to compensate for poor control in one place by changing something elsewhere. Once adjustments start cancelling each other out, it becomes harder to understand what’s actually happening or reproduce the result reliably.
That’s also why I’m cautious about personal “pro tips” and tricks. Someone may discover an adjustment that improves their results without realizing it’s actually just compensating for an unidentified problem elsewhere in their process. It works for them, but do it yourself without the unknown mistake elsewhere, and you just created problems where there weren’t before.
I wish people didn’t share those tweaks so much, as they send people off in the wrong direction and elicit this “you can do it however you want” mentality. The shared reference should always be the standardized process we’re all aiming for…any adjustments made from there are your own and non-transferable.
Getting a decent image is easy. Getting a perfect image is a life’s work.
What follows is my approach to bringing manual home development closer to the consistent processing we expect from a lab, using the equipment and controls available at home.
START WITH GOOD CHEMISTRY [or at least the best you can get]
Cinestill’s kits are better now than they used to be, especially since their partnership with Kodak, but I’d still recommend FPP’s new 3-Part powder kit as it contains separate Bleach and Fixer mixes. [I’ll discuss why that matters later in this post] Of course, if you can get liquid chemistry, it’s worth the extra coin. For the US, Kodak’s Liquid Chem set is obviously the move. For the EU, nothing beats Bellini.
Powdered chemistry creates another problem if you only want to mix half or a quarter of a kit. Never divide the dry powder itself. There can be multiple different chemicals in that bag with different particle sizes and densities, so half the powder does not necessarily mean half of every ingredient. Instead, dissolve the entire packet into a small, known amount of water first. For example, mix the whole packet into 100mL of water and make your own liquid concentrate. Mix it thoroughly until everything is completely dissolved. Now the chemistry is homogeneous: if you want a half batch, use half of that concentrate; if you want a quarter batch, use a quarter of it.
BUT THERE’S A CATCH - The moment you mix these concentrates from your powder, they start oxidizing, but they last way longer as concentrates than as working solutions. With Liquid chemistry, your developer is kept as 3 separate liquids rather than just one, so they only start to degrade rapidly once you mix them together into an active developer.
I also prefer distilled water for mixing chemistry. Tap water varies in hardness, mineral content, and treatment. Metals such as iron and manganese can interfere with developer and contribute to oxidation. Developers may contain chelating or sequestering agents to manage some of those ions, but I’d rather avoid introducing an unnecessary load.
Suitable tap water is fine for rinses. The small amount left after draining is very different from mixing your entire working solution with that water.
MEASURE BY MASS, NOT BY VOLUME [When mixing from concentrates]
Weigh your concentrate instead of measuring by volume. That’s one of the bigger differences between how I mix chemistry in the lab and how most consumer instructions are written. For example, my developer uses roughly 106g of Part A, 19g of Part B, and 40g of Part C. The manufacturer may give those amounts in milliliters, but once I’ve established their mass, weighing them is much more repeatable.
Volume changes with temperature because the density of a liquid changes as it expands and contracts. You also have meniscus-reading error, graduations on cylinders that may not be perfectly accurate, and thick concentrates that cling to the walls of whatever you’re measuring them in. Mass eliminates most of that. A properly calibrated scale is measuring the actual quantity of material present regardless of whether that concentrate is sitting at 65°F or 100°F. I use Ruishan lab scales and have had good luck with them.
If you want to convert the manufacturer’s recommended volume into mass, weigh only the chemistry itself. Put an empty container on the scale, tare it to zero, pour the entire contents of Part A into it, and record the mass of the liquid. Repeat that with Parts B and C. Do exactly the same thing with the liquid concentrates you make yourself from powdered chemistry: tare the receiving container and weigh the concentrate itself, not the bottle plus the concentrate.
I also wouldn’t establish your ratio from one kit. Do this across maybe 5–10 kits and calculate an average. You may be surprised to find the actual amount supplied by the manufacturer varying by 5–10g between packages. For each of those first few kits, measure the full mass before dividing it. Once you’ve built a good average, you can use those numbers going forward and scale your batches very consistently.
STABILIZE YOUR TEMPS [understanding water baths and heat loss]
This causes way more problems than people realize. If your water bath is exactly 100°F, then 100°F is the absolute hottest your chemistry could ever theoretically become. Which isn’t accounting for all of the heat you’re simultaneously losing to the bottle, room air, tank, thermometer, handling, etc. In the real world, a 100°F bath means your chemistry will approach 100°F but probably never actually stabilize there.
Set your bath to around 102ºF and your chems will stabilize at 100ºF.
The other part people miss is that heat transfer is driven by the temperature gradient. If your developer is 70°F and your bath is 102°F, there’s a 32-degree delta between them, so heat transfers very quickly. Once the developer reaches 99°F, there’s only a 3-degree delta. As the two temperatures approach equilibrium, the rate of heat transfer slows dramatically, which means the last degree or two can take 25–30 minutes depending on your bottle, chemistry volume, circulation, and setup.
So either give your chemistry a long time to fully stabilize or use a calibrated digital thermometer and measure the actual developer. Don’t trust the number on the sous vide and assume the chemistry matches it. I want the developer held within about a 0.4°F/0.2C delta of target temperature.
Once you finally get everything to temperature, the goal is to stay at temperature. And that brings us to probably the most controversial step in home C-41:
THE INFAMOUS PRE-SOAK [I know everyone argues about this]
In a proper lab process, you generally do not want a pre-soak at all because the water itself introduces another set of variables before development begins. It changes the condition of the emulsion, affects swelling and chemical uptake, and can alter density and diffusion behavior. Different emulsions also react differently. In my experience, Ultramax and Portra 400 are noticeably more sensitive to an extended pre-soak than films like Kodacolor or Gold.
So why use one at home? Because the thermal situation is completely different. In dip-and-dunk processing, you can put a whole load of room-temperature rolls into a giant tank containing several hundred gallons of hot chemistry, and they barely make a dent in the temperature. At home, you may have a room-temperature tank, reels, center column, lid, and multiple rolls of film, and then pour only 500–1000mL of developer into all that cold material. That can absolutely crash the temperature of your developer. It’s all about thermal mass.
In a home-dev situation, the temperature stability gained from a very short pre-soak outweighs the negatives introduced by the pre-soak itself. The sweet spot is roughly 30–45 seconds. Go shorter, and whether you actually get the tank, reels, and film up to temperature becomes hit-or-miss. Go longer, and you start introducing more of the issues that make pre-soaking undesirable in the first place.
The goal is the shortest water contact that still allows useful thermal transfer.
So some folks say to do a dry preheat…A warm tank doesn’t necessarily establish that the film and reels inside are equally warm, because heat still has to reach those components through the tank and its interior, and air is a horrible thermal conductor. Dry preheating avoids emulsion swelling, but it takes about 45–60 minutes. The practical advantage of the short rinse is that the temperature-controlled water directly contacts the things you need to warm.
The pre-soak water itself should be 100°F, the same as your developer. You’re specifically trying to bring all of that thermal mass up to process temperature before the developer arrives.
Hard rule: from the instant that pre-soak water first touches the film to the instant developer first touches the film, it should not exceed one minute.
That one minute includes the soak itself, dumping the water, and pouring in the developer. So have your developer measured, stabilized, and sitting there ready to go before you start. About 30–45 seconds at 100°F, dump it, and immediately put the developer in.
COMPENSATION IS NOT THE SAME AS CONTROL [control each variable independently]
Some people address the cold-tank problem by deliberately heating their developer above the intended processing temperature. The idea is that it will cool as it enters the tank and land at the temperature they actually want. In theory, this works, but in practice…good luck
You’ve got variable room temp, variable contents in the tank, and variables in handling. Trying to get the developer to warm all those up to the perfect temp while falling to just the right amount is the exact kind of variables chasing variables that we want to engineer out of the system. Not to mention the whole “as the two materials approach thermal equilibrium, the thermal transfer slows dramatically,” it’s unlikely everything will stabilize at 100ºF within 3:15.
So rather than doing everything in your power to gauge the temp drop perfectly and taking mid-processing temp readings to see how accurate you are and adjusting your process over time, bit by bit, until you get the temp drop to land JUST RIGHT and then trying to repeat that process perfectly every single time…why not delete the temp drop from the process altogether?
Why compensate when you can remove?
The short pre-soak brings the loaded tank toward the developer temperature before development begins. The developer no longer has to warm the equipment while also developing the film.
The preheating stage should preheat. The developer should develop. Keeping those jobs separate makes the process easier to repeat.
Some people think you need to rinse your film until the water runs clear before the dev goes in…film manufacturers would not be so crass as to put stuff in/on film that messes up the developer. [excluding ECN-2 films]
MECHANICALLY STABLE AGITATION [inversion agitation is absolute crap]
Once temperature and that transition into developer are under control, agitation is another variable worth making repeatable. Its purpose is to continuously replace the locally exhausted chemistry sitting against the emulsion with fresh developer. It also prevents bromide, a byproduct of development, from accumulating unevenly around the film surface. If bromide is allowed to pool or move unevenly across the negative, it restrains development locally and can create bromide drag.
For maximum consistency, I prefer gentle, continuous rotary agitation over intermittent inversions. You’ll need a daylight tank with a properly sealed lid that can operate horizontally, like a Patterson or Jobo. Put the tank on its side in your temperature-controlled water bath and rotate it. Congratulations: you have invented the non-automatic rotary processor.
The tank still stays in the bath to maintain temperature. It just sits sideways rather than upright, rotating around its long axis like an axle turning.
Treat 20 RPM as your lower limit, which is about one complete revolution every three seconds, and 60 RPM as your upper limit, or about one revolution per second. Anywhere within that 20–60 RPM range is perfectly fine. You’re not going to materially alter the film because you picked 27 RPM instead of 43 RPM; what matters is that you have continuous, consistent chemical movement and that you stay within those boundaries.
This is continuous rotation for the whole development interval, not a turn or two every 30 seconds. Choose a reliable speed and keep the movement consistent.
Yes, doing that manually is more work than a few inversions every 30 seconds. But you signed up to shoot film. If you’re trying to squeeze every last drop of dEm tOnEz out of your negatives, don’t take the lazy way out. If avoiding all that work was the goal, well… shoot digital.
PROCESS TO COMPLETION [bleach and fixer time]
Congrats, the only time & temperature sensitive step is complete, everything else is just process to completion. While you can under and over develop, with bleach and fixer [or blix], you just leave the film in until it’s done. There’s not really a way to over-do it. If you under-do it, you can just stick it back in and keep going, no harm, no foul.
Let’s start with bleach
Bleach in C-41 serves two purposes, and the first one is especially important: The bleach is your STOP BATH. When developer time is up, you want development arrested immediately. That’s why the transition should be: DEVELOPER → BLEACH
No intermediate water rinse. Developer out, bleach in.
For timing, I aim for 3 minutes and 15 seconds from developer first touching the film to bleach first touching the film. Have your bleach ready so that draining and changing baths is part of a deliberate, repeatable transition rather than an opportunity for development to continue while you prepare the next step.
Yes, you’ll carry a small amount of developer into the bleach. That’s okay. Your developer is generally going to reach exhaustion long before that small amount of carryover ruins a properly maintained bleach bath. The more important thing is stopping development quickly and consistently.
Water doesn’t accomplish that properly because it mostly just dilutes the developer. An ordinary acetic-acid darkroom stop bath doesn’t accomplish the same thing either. C-41 bleaching chemistry uses ferric chelates such as EDTA- or PDTA-based systems, and the bleach’s chemical environment rapidly arrests development while beginning the next reaction. That immediate stop is important to color balance because you don’t want development continuing unpredictably while you’re rinsing or screwing around between steps.
The bleach’s second job is dealing with the metallic silver created during development. The easiest conceptual way to understand it is that the bleach UN-develops the silver. Developer converted exposed silver halide into metallic silver. Bleach oxidizes that metallic silver back into silver compounds that the fixer can remove. Development builds the silver image; bleach chemically un-develops that silver image; fixer gets rid of it.
As bleach becomes exhausted, that process takes longer and longer. With a healthy separate bleach, I generally wouldn’t expect it to require substantially more than about 6 minutes 30 seconds. If it still isn’t getting the job done at seven minutes, your bleach is probably toast.
Then comes fixer [or the fixer half of BLIX]
Fixer dissolves the silver compounds remaining in the emulsion. With black-and-white film, the developed metallic silver is your finished image, so you preserve it. With color negative film, the dyes are the finished image. The entire point of bleaching is to convert the developed metallic silver into something the fixer can remove, so by the end of C-41 processing you want essentially all of the silver gone, leaving the dye image behind.
I use 6 minutes and 30 seconds for bleach and 6 minutes and 30 seconds for fixer. The initial reaction happens quickly, while completing the remaining work takes longer. I’d rather allow that additional time than stop at the earliest apparent clearing point.
Between bleach and fixer, I use at least two water changes to reduce bleach carryover and help keep the fixer bath clean.
This is also why I strongly prefer separate bleach and fixer if you’re chasing maximum consistency. BLIX works, but you’ve got two processes happening in one solution: one component is trying to convert metallic silver into removable silver compounds while the other is simultaneously trying to dissolve those compounds. As BLIX gets closer to exhaustion, those competing reactions make its behavior increasingly complicated. It starts getting closer to a kind of chemical equilibrium instead of simply behaving like an individual bath reaching straightforward saturation. Separate bleach and fixer are much easier to understand, monitor, and diagnose.
But the biggest reason I prefer keeping them separate is disposal. Having bleach and fixer as individual baths makes them easier to manage separately afterward.
I’ll put a separate comment below this post covering chemical reuse, capacity, additional techniques like two-bath fixing, and waste treatment and disposal. This main post is about getting good development.
Again, everything after developer is much more forgiving because bleach and fix are process-to-completion steps. If you find out your bleach was exhausted, you can put the film back into fresh bleach and re-bleach it. If the film wasn’t completely fixed, you can re-fix it.
That’s useful when investigating unexpectedly dense negatives. Incomplete bleaching leaves metallic silver behind, adding density and contrast and reducing apparent saturation [the partial bleach-bypass appearance]. Incomplete fixing can leave a cloudy or milky appearance.
RINSE TO FINALIZE [avoiding water spots and dirty negs]
My final wash is five separate water changes, each two minutes long, for ten minutes total.
Both contact time and fresh water matter. Residual material needs time to diffuse out of the emulsion. As it accumulates in the water, the concentration difference driving that movement becomes smaller. Draining and replacing the water restores that difference.
Think of successive dilution: each effective change removes a portion of what remains. One long soak leaves the film in increasingly contaminated water, while extremely brief fill-and-dump cycles provide little time for material to leave the emulsion. Several fresh changes with meaningful contact time address both concerns.
After washing, I use my stabilizer bath and add Photo-Flo to help the water drain evenly. In my own mixture, I add the same measured volume of Photo-Flo concentrate as stabilizer concentrate to the water. DISTILLED WATER ONLY, the goal is clean negs, don’t cheap out at the finish line.
Though a squeegee isn’t required, I’m a huge fan of the serpentine squeegee from Paterson. No actual clamping pressure on the film, just a wiggly path through some “windshield wipers”. Removing 90% of the water also means removing 90% of anything that could deposit on the film. While they dry, keep your film in a place with as little airflow as possible. Dust in the air will stick to the wet and soft emulsion, then dry in place. A closet with the door closed or inside the shower with the curtain closed will suffice.
Ta-Da. Lab grade, my guy.
TO RECAP [TL;DR]
If I were trying to make home C-41 genuinely repeatable, the part I’d obsess over is:
Temp Stabilization → 30–60 sec pre-soak at 100-102°F → Developer for 3:15 → IMMEDIATE Bleach → Rotary Style Agitation only
Get that pipeline absolutely nailed. Keep the actual developer within roughly 0.4°F of target, keep the total pre-soak-to-developer interval under one minute, go straight from developer into bleach, and make your agitation mechanically repeatable.
Once you’ve locked all of that down, you’ve eliminated a massive number of variables before NLP ever even sees the negative. And that’s really why I think people sometimes chase their tails with scanning and NLP settings. If the relationship between the cyan, magenta, and yellow dye layers is already screwed up in the negative, NLP can’t know that. It just sees the data you gave it.
If you’ve got any questions, feel free to comment them or shoot me a message on Instagram @mediamfilmlab. I don’t believe in gatekeeping whatsoever.