WOF Print Intent
The metadata node that tells the darkroom what you wanted
- print_intent
Not every node processes pixels. WOFPrintLab produces zero images, touches zero latents, and is still one of the more interesting nodes in this pack - because it's the pack's attempt to capture intent as machine-readable metadata. It defines a "print intent" - tonal emphasis, contrast grade, paper stock, finish, developer, agitation - and hands it downstream as a WOF_PRINT_INTENT object that other nodes can validate against.
The clue is in the name: WOF is the pack's "WOF Post-Processing Schema," a defined metadata format anchored to a schema file in the repo. The node's own description is blunt about it: "Does not process images - downstream nodes consume the print_intent dict." So what's it for? Reproducibility and self-documentation. You say what print you intended, and the pipeline can check that your choices are coherent - a pushed-to-3200 stock demanding a Grade 5 contrast class with a soft-high-key tonal emphasis is the kind of mismatch the schema exists to catch.
How it works
Three required fields define the core intent:
- tonal_emphasis - the character of the print: neutral, full_scale, high_key_soft, high_key_contrast, low_key, crushed_blacks, zone_system_iii_viii, highlight_detail_viii, shadow_detail_iii, compressed_midtones, solarized, or undefined. These read like a photographer's brief, because that's exactly what they are.
- contrast_class - the paper grade the print targets: grade_00 through grade_5. This is the metadata twin of the PrintLab contrast filters.
- paper_stock - a string naming the paper (default
ilford_galerie_fb_matt).
Then the optional fields add the full darkroom recipe: print_finish (none, straight, selenium_light/heavy, warmtone, cooltone, lith) with print_finish_strength, developer (default "Dektol 1:2"), temperature (15–25°C), development_time (0.5–30 min), agitation (stand/standard/continuous), and a free-text notes field.
Output is a single print_intent of type WOF_PRINT_INTENT. That dict is what downstream WOF-aware nodes consume - PromptLab, for example, accepts a wof_print_intent input and validates that the prompt's tonal/contrast metadata is compatible with the selected film stock and era.
When to use it
- When you're building reproducible workflows and want the "how should this print look" decision recorded in the graph, not in your head.
- When you want PromptLab's validation to steer prompt choices toward a coherent stock/print combo.
- Honestly, when you're new to it, it's a way to learn the vocabulary of darkroom intent without touching chemicals - the schema is a surprisingly good glossary.
Install
Pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/AlbertJBurton/comfyui-jbnodes.git
cd comfyui-jbnodes
pip install -r requirements.txt
Restart ComfyUI, or ComfyUI Manager → "comfyui-jbnodes."
Gotchas
- If no downstream node consumes
print_intent, this node does literally nothing to your image. Don't drop it into a graph expecting a visual change. - The schema is the pack author's own design, not a community standard - don't expect other packs to understand
WOF_PRINT_INTENT. - The
paper_stock,developer, andnotesfields are free text, so spelling consistency is on you - the schema validates enum fields but won't catch a typo'd paper name.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| tonal_emphasis | COMBO | undefined | 12 options: undefined, neutral, full_scale, high_key_soft, high_key_contrast, low_key, +6 |
| contrast_class | COMBO | grade_2 | 7 options: grade_00, grade_0, grade_1, grade_2, grade_3, grade_4, +1 |
| paper_stock | STRING | ilford_galerie_fb_matt | — |
| print_finishopt | COMBO | none | 7 options: none, straight, selenium_light, selenium_heavy, warmtone, cooltone, +1 |
| print_finish_strengthopt | FLOAT | 1.00–2 | — |
| developeropt | STRING | Dektol 1:2 | — |
| temperatureopt | FLOAT | 20.015–25 | — |
| development_timeopt | FLOAT | 2.00.5–30 | — |
| agitationopt | COMBO | standard | 3 options: stand, standard, continuous |
| notesopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| print_intent | WOF_PRINT_INTENT | — |