- image
- mask
- image
- mask
- film_print_info
Every colorist's favorite finish is a film print emulation - the soft toe, the compressed shoulder, the subtle channel separation that turns a flat digital grade into something that looks like it was printed onto celluloid and lit. Usually that means hunting down a Kodak 2383 LUT. x1FilmPrint gives you that look as a node, with the print stock built in, so there's nothing to download and nothing to map onto a new color space by hand.
It's part of MKRShift Nodes by Cris K B, under MKRShift Nodes/Color/LUT - the pack's alternative to shipping actual .cube files.
How it works
Peek at the source and you'll find the whole thing is a table of print profiles. Each stock defines a color matrix (the channel cross-talk that separates film from a clean digital transform), per-channel gamma, a contrast value, a saturation value, and - the part that makes it read as film rather than "a filter" - toe and shoulder. The toe is the gentle lift in the shadows; the shoulder is the soft roll-off in the highlights. A print film doesn't clip white, it bends it, and that's the single biggest difference between a print LUT and a contrast curve.
The stocks available: kodak_2383 (the default, the classic orange-and-teal-friendly print film), fuji_3513, bleach_bypass (that desaturated, high-contrast, pushed look), silver_fade (aged, faded stock), and neutral_clean (a reference-grade baseline). On top of the stock you get density (-1 to 1, overall exposure push/pull), contrast and saturation overrides, warmth, and fade - which lifts the blacks toward grey for that "old print faded by light" finish. You can also push toe and shoulder yourself, which is the knob that actually separates "film look" from "contrast slider."
The inputs that matter
Inside the settings_json:
stock-kodak_2383(default),fuji_3513,bleach_bypass,silver_fade, orneutral_clean.density- overall exposure shift.toe/shoulder- shadow lift and highlight roll-off; this is the "is it film" dial.fade- how much the blacks lift toward grey.saturation/contrast/warmth- the global tuning over the stock.
Optional mask input with mask_feather / invert_mask, plus outputs image, mask, and a film_print_info string.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI, or install via ComfyUI Manager (search MKRShift_Nodes). No requirements.txt, no LUT files, no model downloads.
The honest caveat
These are approximations, and they're tuned for sRGB-ish 0-1 image space, not a proper scene-linear pipeline with an OCIO config - the post-processing KB is right that handing an sRGB PNG to a real print transform is a color-management problem this node sidesteps by working in the image's own space. Which is fine: for the "I want the 2383 vibe on my generated frame" 99% use case, it lands. Skip the LUT rabbit hole, set stock to kodak_2383, nudge toe up a touch, and see if your image finally stops looking like a render. bleach_bypass is the one I'd pick for gritty B&W-adjacent drama; silver_fade for "found footage from 1982."
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"stock":"kodak_2383","density":0.0,"contrast":1.0,"saturation":1.0,"warmth":0.0,"toe":0.2,"shoulder":0.22,"fade":0.0,"mix":1.0,"mask_feather":12.0,"invert_mask":false} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| film_print_info | STRING | — |