pixelkiln 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PROVIDERS.md CHANGED
@@ -66,19 +66,19 @@ prompt, size, batch, and optional seed inputs PixelKiln may replace.
66
66
 
67
67
  | Decision | ComfyUI through PixelKiln |
68
68
  |---|---|
69
- | Best fit today | Private assets, local models, custom graph control, and teams that already maintain ComfyUI workflows |
69
+ | Best fit today | Local composition experiments, private inputs, and teams prepared to maintain and manually validate custom graphs |
70
70
  | PixelKiln generator | `map` stills |
71
71
  | Output | One PNG output node, with 1–16 review candidates |
72
72
  | Cost model | `0 free`; local compute and hosting are outside PixelKiln's estimate |
73
73
  | Reproducibility | Workflow content is hashed; model files, custom-node versions, and runtime settings must still be managed outside PixelKiln |
74
74
  | Account lifecycle | Read-only connectivity check; no balance, remote object listing, tagging, or purge |
75
- | Confidence | Full mocked coverage plus a live core-node single-image lifecycle, four-candidate queue, and cache-only restore on Apple MPS; pixel-art model benchmark pending |
75
+ | Confidence | Full mocked coverage plus live generation, four-candidate review, and cache-only restore on Apple MPS; cleanup and native-grid experiments remain manual, and aesthetic approval remains human |
76
76
 
77
- ComfyUI is the strongest option when workflow ownership matters more than a
78
- managed service. It is also the easiest provider to make irreproducible by
79
- accident. Two machines can share the same graph but differ in checkpoint bytes,
80
- custom-node versions, or sampler behavior. Commit the workflow and document the
81
- external model stack used to validate it.
77
+ Choose ComfyUI when workflow ownership is worth manual validation. If the goal
78
+ is the least cleanup between a prompt and usable pixel art, start with a
79
+ specialized hosted provider. Two ComfyUI machines can share the same graph but
80
+ differ in checkpoint bytes, custom-node versions, or sampler behavior. Commit
81
+ the workflow and document the external model stack used to validate it.
82
82
 
83
83
  ## Large environments, mountains, and buildings
84
84
 
@@ -87,8 +87,8 @@ background. That distinction matters more than raw canvas size.
87
87
 
88
88
  | Asset type | PixelLab | Retro Diffusion | ComfyUI |
89
89
  |---|---|---|---|
90
- | Isolated house, building, mountain, or landmark | Start with `map`: arbitrary dimensions up to 400×400 and a measured one-generation cost. Live benchmark outputs had opaque backgrounds, so plan for cleanup. Use `1dir` only when references or candidate variety justify 20–40 generations and a square canvas. | Start with `rd_plus__topdown_asset`, `rd_plus__isometric_asset`, or `rd_tile__scene_object`, depending on perspective. `rd_tile__scene_object` is intended for 64–384px objects placed on tile maps. | Choose a checkpoint or LoRA trained for the intended perspective, then keep background removal or segmentation in the workflow. The adapter accepts up to 4096px per edge, but useful size depends on the model and VRAM. |
91
- | Full scenic background | Use `pixflux` with `noBackground: false` when an exact palette matters, or `map` for a simple scene. Current PixelKiln routes top out at 400×400. | `rd_plus__environment` targets one-point-perspective scenes; `rd_plus__topdown_map` targets 3/4 top-down maps. These styles support up to 384×384. | A custom workflow can use composition controls, tiled diffusion, or a generate-then-downscale path. PixelKiln does not configure those nodes; it binds the final size and records the graph hash. |
90
+ | Isolated house, building, mountain, or landmark | Start with `map`: arbitrary dimensions up to 400×400 and a measured one-generation cost. Live benchmark outputs had opaque backgrounds, so plan for cleanup. Use `1dir` only when references or candidate variety justify 20–40 generations and a square canvas. | Start with `rd_plus__topdown_asset`, `rd_plus__isometric_asset`, or `rd_tile__scene_object`, depending on perspective. `rd_tile__scene_object` is intended for 64–384px objects placed on tile maps. | Choose a checkpoint or LoRA trained for the intended perspective, then keep background removal or segmentation in the workflow. For the tested Pixel Art XL stack, target 48–128px native components even though the adapter accepts larger working canvases. |
91
+ | Full scenic background | Use `pixflux` with `noBackground: false` when an exact palette matters, or `map` for a simple scene. Current PixelKiln routes top out at 400×400. | `rd_plus__environment` targets one-point-perspective scenes; `rd_plus__topdown_map` targets 3/4 top-down maps. These styles support up to 384×384. | Use composition controls only to establish the scene. Recover and review native components, then compose them at 1× with one grid and palette. A large model canvas is not a large native pixel-art canvas. |
92
92
  | Style consistency across a set | `1dir` accepts a style reference and returns size-dependent candidates, but it is more expensive and capped at the square-object range. | RD Pro accepts up to nine references and has stronger prompt following, but its common styles top out at 256×256 and cost $0.18 per image. Environment-specific RD Plus styles trade references for a larger 384px canvas. | LoRAs, reference adapters, ControlNet, and shared latent settings can live in the committed workflow. Reproducibility also depends on external model and custom-node versions. |
93
93
  | Very large final scene | Generate reusable objects, terrain, and background layers separately; assemble them deterministically and integer-upscale the result. | Use the same layered approach. The API has a 512px overall ceiling, but the useful environment and scene-object styles currently cap at 384px. | The graph can tile, upscale, or composite beyond hosted-provider limits, but memory and seam quality become workflow concerns. Prefer reusable layers unless the scene truly needs one render. |
94
94
 
@@ -155,7 +155,7 @@ reviewed outputs independently, or combine explicit files with `pixelkiln pack
155
155
  This is a useful split when PixelLab handles prompt-sensitive buildings and
156
156
  account recovery, Retro Diffusion handles environment-styled backdrops, clean
157
157
  cutouts, or native animation, and ComfyUI handles private or project-specific
158
- model workflows. Retro Diffusion is not a higher-resolution
158
+ model experiments that can absorb manual cleanup. Retro Diffusion is not a higher-resolution
159
159
  route through PixelKiln today: its useful environment styles cap at 384×384,
160
160
  while PixelLab `map` reaches 400×400. Its advantage is the model/style and
161
161
  output type, not raw dimensions.
@@ -207,11 +207,11 @@ estimate and hard budget remain enforced.
207
207
 
208
208
  ## What to build next
209
209
 
210
- The first ComfyUI release now has a live, versioned core-node reference
211
- workflow. The remaining confidence gap is visual rather than transport: choose
212
- and pin a pixel-art model or LoRA, then benchmark a large building and scenic
213
- background against the hosted-provider briefs. A human still needs to complete
214
- the live four-candidate selection and fetch path.
210
+ The first ComfyUI release has a live, versioned core-node reference workflow.
211
+ Transport, candidate review, provenance, and cache recovery work. Art quality is
212
+ still the gap. The tested SDXL plus Pixel Art XL graph is useful for composition,
213
+ but it is not a production preset. Native-grid recovery, final palette
214
+ enforcement, prompt coverage, and aesthetic approval remain manual.
215
215
 
216
216
  Native per-style provider routing remains the highest-value orchestration
217
217
  feature. One manifest should be able to send a building style to PixelLab, an
@@ -240,15 +240,18 @@ captured before submission.
240
240
 
241
241
  Recommended order:
242
242
 
243
- 1. Select and benchmark a pinned pixel-art ComfyUI workflow, including a human-reviewed candidate fetch.
244
- 2. Add per-style provider selection, provider-keyed budgets, and mixed-provider
243
+ 1. Build a provider-neutral post-processing record for background removal,
244
+ native-grid recovery, final palette enforcement, and human approval.
245
+ 2. Benchmark pinned ComfyUI models and prompt patterns across at least two scene
246
+ families. Reject any supposed improvement that helps only one subject.
247
+ 3. Add per-style provider selection, provider-keyed budgets, and mixed-provider
245
248
  integration tests.
246
- 3. Finish live Retro Diffusion multi-candidate, tileset, GIF, and spritesheet
249
+ 4. Finish live Retro Diffusion multi-candidate, tileset, GIF, and spritesheet
247
250
  smoke tests.
248
- 4. Build the Scenario still-image spike from issue #52 with dry-run cost, submit, poll,
251
+ 5. Build the Scenario still-image spike from issue #52 with dry-run cost, submit, poll,
249
252
  download, and one custom-model or reference-image benchmark.
250
- 5. Design ComfyUI Cloud as a separate authenticated and billable adapter.
251
- 6. Consider general raster marketplaces only with explicit nearest-neighbor,
253
+ 6. Design ComfyUI Cloud as a separate authenticated and billable adapter.
254
+ 7. Consider general raster marketplaces only with explicit nearest-neighbor,
252
255
  palette, transparency, and reproducibility checks.
253
256
 
254
257
  Midjourney is not an adapter target without an official public API. Automating
package/README.md CHANGED
@@ -24,7 +24,8 @@ tileset, GIF, and spritesheet live runs remain. An experimental ComfyUI adapter
24
24
  runs committed API-format still-image workflows on a self-hosted server. Its
25
25
  core-node smoke project has passed live generation, candidate queueing, and
26
26
  cache-only recovery on Apple MPS. An SDXL plus Pixel Art XL workflow also has
27
- four committed building and environment samples. See
27
+ four baseline samples and four diagnostic cleanup samples. It is source
28
+ material, not a production-ready pixel-art preset. See
28
29
  [provider comparison](./PROVIDERS.md) for the trade-offs, including large
29
30
  environment and building workflows.
30
31
  `FakeProvider` exercises the same contract deterministically in tests.
@@ -189,7 +190,14 @@ select another provider and pass namespaced `providerOptions`; see
189
190
  [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md), and
190
191
  [Set up ComfyUI](./docs/COMFYUI.md). The
191
192
  [provider comparison](./PROVIDERS.md) covers costs,
192
- current confidence, and limitations.
193
+ current confidence, and limitations. The committed ComfyUI projects now include
194
+ transparent cutouts, palette-controlled backgrounds, wide environment canvases,
195
+ and native-grid recovery for model output that only looks like pixel art. The
196
+ ComfyUI guidance is quality-first: start with 48–128px native components,
197
+ apply the final palette after grid recovery, require prompt-coverage and human
198
+ cluster-and-silhouette review, and compose larger scenes from accepted parts
199
+ instead of chasing a larger raster. Those cleanup and approval steps are manual
200
+ today.
193
201
 
194
202
  The schema rejects unknown fields and invalid generator combinations before
195
203
  planning. See the [Manifest reference](./docs/MANIFEST.md).
@@ -347,7 +355,7 @@ writes, and offline provenance verification. See [Library API](./docs/LIBRARY.md
347
355
  | [Manifest reference](./docs/MANIFEST.md) | Every style/asset field and generator constraint. |
348
356
  | [Agent workflows](./docs/AGENTS.md) | Official skill install, operating model, and provider-aware safety. |
349
357
  | [Generators](./docs/GENERATORS.md) | Capability choice, measured costs, palettes, style references, and tiles. |
350
- | [Environment provider benchmark](./docs/PROVIDER_BENCHMARK.md) | Twenty-four outputs comparing buildings, landmarks, large backgrounds, cost, and file readiness. |
358
+ | [Environment provider benchmark](./docs/PROVIDER_BENCHMARK.md) | Thirty provider outputs plus three deterministic native-grid results comparing large scenes, transparency, palette size, and file readiness. |
351
359
  | [Derived artifacts](./docs/ARTIFACTS.md) | Pack, mount, export, provenance, ownership, transactions, and recovery. |
352
360
  | [Recovery](./docs/RECOVERY.md) | Restore, caches, adopt, salvage, claims, and purge safety. |
353
361
  | [Quality gates](./docs/QUALITY.md) | Plan, doctor, audit, cache, JSON, and CI. |
package/docs/AGENTS.md CHANGED
@@ -28,7 +28,9 @@ With the skill loaded, an agent should:
28
28
  5. Pass an explicit `--budget` within the amount the user authorized.
29
29
  6. Leave artwork selection in the local `pick` page unless the user gives a
30
30
  specific selection rule.
31
- 7. Commit the manifest, lockfile, generated output, and artifact companions, but
31
+ 7. Treat ComfyUI output as source material until native-grid, final-palette,
32
+ prompt-coverage, and human 1× checks pass.
33
+ 8. Commit the manifest, lockfile, generated output, and artifact companions, but
32
34
  never credentials or `.pixelkiln/` caches.
33
35
 
34
36
  The skill guides the workflow; PixelKiln remains the deterministic execution
@@ -48,7 +50,7 @@ not a replacement:
48
50
  | PixelKiln library/CLI | Budgets, state, provenance, review, recovery, audit, and packaging. |
49
51
  | PixelLab adapter | The current production and live-tested generation backend. |
50
52
  | Retro Diffusion adapter | Experimental backend; authenticated paid single-still lifecycle plus mocked advanced-workflow tests. |
51
- | ComfyUI adapter | Experimental self-hosted still-image backend using a committed API-format workflow. |
53
+ | ComfyUI adapter | Experimental self-hosted still-image backend; generated PNGs need manual structural and visual approval. |
52
54
 
53
55
  PixelKiln's core is provider-neutral, but PixelLab remains the only production
54
56
  and paid-generation-tested adapter. Retro Diffusion generation support is
package/docs/COMFYUI.md CHANGED
@@ -4,9 +4,44 @@ PixelKiln can run a committed ComfyUI workflow on a self-hosted server. This
4
4
  adapter is experimental. It supports still-image `map` jobs, one or more review
5
5
  candidates, local provenance, and cache-backed recovery. A core-node Stable
6
6
  Diffusion 1.5 workflow has passed single-image generation and a four-candidate
7
- review queue on Apple MPS. A higher-quality SDXL workflow has also passed four
7
+ review queue on Apple MPS. An SDXL composition workflow has also passed four
8
8
  building and environment renders. ComfyUI Cloud is not part of this release.
9
9
 
10
+ [Visit ComfyUI](https://www.comfy.org/) or continue with the local setup below.
11
+
12
+ ## Decide whether ComfyUI fits
13
+
14
+ Use this adapter when local control, private inputs, or a custom graph justifies
15
+ maintaining the workflow. It is not a turnkey route to game-ready pixel art.
16
+ The tested SDXL plus Pixel Art XL graph can produce useful source compositions,
17
+ but the result still needs native-grid recovery, a final palette pass, and human
18
+ art review.
19
+
20
+ If the main goal is the shortest path to usable pixel art, compare PixelLab and
21
+ Retro Diffusion first. Choose ComfyUI when owning the workflow is worth the
22
+ extra model testing and cleanup.
23
+
24
+ ### Minimal safe path
25
+
26
+ 1. Generate two to four candidates at the model's normal working size.
27
+ 2. Reject missing subjects, weak silhouettes, and bad composition before doing
28
+ any cleanup.
29
+ 3. For isolated art, remove the background at full resolution.
30
+ 4. Recover one native pixel per detected cell.
31
+ 5. Quantize the recovered native image to the final project palette. Start with
32
+ 16–32 colors and no dithering.
33
+ 6. Review the native file at 1× and an integer zoom.
34
+ 7. Keep the smallest clear result. Start with 48–128px native components and
35
+ compose larger scenes from accepted parts.
36
+
37
+ Stop after step 2 when the image misses the brief. Background removal,
38
+ pixel-grid recovery, and palette reduction cannot restore a missing building or
39
+ repair a weak composition.
40
+
41
+ PixelKiln currently automates generation, candidate review, provenance, and
42
+ recovery from its local cache. It does not automate steps 3–6. Treat every
43
+ ComfyUI output as source material until those checks pass.
44
+
10
45
  ## Start ComfyUI
11
46
 
12
47
  Install and start ComfyUI using its
@@ -53,30 +88,191 @@ The repository includes a working core-node
53
88
  from ComfyUI's official first-generation guide to test plumbing, not to claim
54
89
  pixel-art quality.
55
90
 
56
- ## Install the tested quality stack
91
+ ## Install the tested composition stack
57
92
 
58
- The committed quality benchmark uses two public model files:
93
+ The committed composition and post-processing benchmarks use three public model
94
+ files:
59
95
 
60
96
  | File | ComfyUI folder | SHA-256 | License named by the model card |
61
97
  |---|---|---|---|
62
98
  | [`sd_xl_base_1.0.safetensors`](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors) | `models/checkpoints` | `31e35c80fc4829d14f90153f4c74cd59c90b779f6afe05a74cd6120b893f7e5b` | CreativeML Open RAIL++-M |
63
99
  | [`pixel-art-xl.safetensors`](https://huggingface.co/nerijs/pixel-art-xl/blob/main/pixel-art-xl.safetensors) | `models/loras` | `4234637cb80c998f41e348e6a6cb6bc20d8d038b2b0f256b6129b3b5e353eef7` | CreativeML OpenRAIL-M |
100
+ | [`birefnet.safetensors`](https://huggingface.co/Comfy-Org/BiRefNet/blob/main/background_removal/birefnet.safetensors) | `models/background_removal` | `9ab37426bf4de0567af6b5d21b16151357149139362e6e8992021b8ce356a154` | MIT |
64
101
 
65
102
  Download each file into the named folder, verify its checksum, then confirm the
66
- checkpoint and LoRA appear in ComfyUI. The files are about 6.9 GB and 171 MB.
67
- They are not bundled with PixelKiln. Read both model cards before distributing
68
- the models or their outputs.
69
-
70
- The benchmark renders at 1024×1024, where SDXL has enough room to compose the
71
- scene, then uses ComfyUI's core `ImageScale` node with `nearest-exact` to write
72
- the requested 256px or 384px PNG. Asset width and height are therefore bound to
73
- the scale node, not the latent node. This is the useful trick: keep the model at
74
- its working resolution while PixelKiln still validates the exact game-ready
75
- output dimensions.
103
+ checkpoint, LoRA, and background-removal model appear in ComfyUI. The files are
104
+ about 6.9 GB, 171 MB, and 444 MB. They are not bundled with PixelKiln. Read the
105
+ model cards before distributing the models or their outputs.
106
+
107
+ The environment benchmark renders at 1024×1024, where SDXL has enough room to
108
+ compose the scene, then uses ComfyUI's core `ImageScale` node with
109
+ `nearest-exact` to write the requested 256px or 384px PNG. Asset width and
110
+ height are therefore bound to the scale node, not the latent node. Those files
111
+ prove exact delivery dimensions; they do not prove a native pixel grid. The
112
+ separate native-grid benchmark saves the model canvas and reconstructs its
113
+ implied cells afterward.
76
114
 
77
115
  You can reproduce the four samples with the committed
78
116
  [ComfyUI benchmark project](../benchmarks/provider-environments/comfyui/README.md).
79
117
 
118
+ ## Background removal and palette experiments
119
+
120
+ ComfyUI 0.34.3 has the required nodes in core. No custom-node package is needed.
121
+ The tested isolated-asset graph runs these nodes in this order:
122
+
123
+ 1. Decode the 1024×1024 SDXL image.
124
+ 2. Run `RemoveBackground` with the loaded BiRefNet model.
125
+ 3. Invert the returned background mask for use as foreground alpha.
126
+ 4. Run `ImageQuantize` on the RGB image with 64 colors and no dithering.
127
+ 5. Join the quantized RGB image with the alpha mask.
128
+ 6. Reduce the RGBA result with `ImageScale` set to `nearest-exact`.
129
+
130
+ This graph is a diagnostic experiment, not the recommended finished pipeline.
131
+ It proves the cleanup nodes run and preserves the alpha mask by letting BiRefNet
132
+ see the full-resolution, full-color image. Its pre-scale quantization does not
133
+ guarantee the color count of a later native-grid reconstruction, because grid
134
+ recovery can introduce averaged colors.
135
+
136
+ For an isolated production candidate, use this order instead:
137
+
138
+ 1. decode the full-resolution model output;
139
+ 2. remove its background and preserve the alpha mask;
140
+ 3. recover the native pixel grid without resampling the alpha edge;
141
+ 4. quantize the recovered native RGB image to the final project palette;
142
+ 5. audit and review the final native RGBA file.
143
+
144
+ Scenic backgrounds skip background removal. They still need grid recovery,
145
+ final palette enforcement, and review.
146
+
147
+ The [post-processing benchmark](../benchmarks/provider-postprocessing/comfyui/README.md)
148
+ reuses the same prompts, seeds, SDXL settings, and LoRA strengths as the first
149
+ ComfyUI run. Its two isolated assets have 60% and 62% transparent pixels and 55
150
+ and 58 RGB colors. The two backgrounds use 64 and 60 colors. The original
151
+ files ranged from 16,811 to 50,985 colors.
152
+
153
+ Use PixelKiln to keep those requirements enforceable:
154
+
155
+ ```bash
156
+ pixelkiln audit --style isolated-refined --min-transparency 0.5 --max-colors 64 --check
157
+ pixelkiln audit --style background-refined --max-colors 64 --check
158
+ ```
159
+
160
+ Start without dithering for compact game art. Floyd-Steinberg can soften bands,
161
+ but it adds noisy pixel patterns. Ordered Bayer dithering is easier to art-direct
162
+ when a project needs deliberate texture. Whichever mode you choose becomes part
163
+ of the committed workflow hash.
164
+
165
+ ## Recover a native pixel grid
166
+
167
+ File size is not pixel-art resolution. Keep these three measurements separate:
168
+
169
+ 1. The **generation canvas** is the raster SDXL produces, such as 1024×1024.
170
+ 2. The **native art grid** has one stored pixel for each editable pixel-art cell.
171
+ 3. The **display size** is an integer-scaled view of the native art.
172
+
173
+ Pixel Art XL can draw convincing pixel-shaped texture without producing a
174
+ consistent one-pixel grid. Our 1024×1024 test image carried an implied 8px cell
175
+ and resolved to 128×128 native art. Its 1344×768 wide version resolved to 168×96.
176
+ Nearest-neighbor scaling preserved those fake cells but did not fix them.
177
+
178
+ Retro Diffusion's MIT-licensed
179
+ [Pixel Art Fixer](https://github.com/Retro-Diffusion/pixel-art-fixer) detects the
180
+ implied grid and reconstructs one output pixel per cell. Both benchmark sources
181
+ returned the high-confidence `fast:ac+rl(S)` decision. The checked-in
182
+ [native-grid boundary benchmark](../benchmarks/provider-hires/comfyui/README.md) includes
183
+ the source PNGs, native reconstructions, dimensions, hashes, and pinned fixer
184
+ revision.
185
+
186
+ Treat the native PNG as the canonical asset. Edit and compose it at 1×. Scale it
187
+ only for display, using integer dimensions and nearest-neighbor rendering. A
188
+ 2048px file made from a 1024px pseudo-pixel source is not higher-quality pixel
189
+ art, even when every source pixel becomes an exact 2×2 block.
190
+
191
+ The open fixer is deterministic image processing. Its maintainers also offer a
192
+ [hosted neural fixer](https://www.retrodiffusion.ai/tools/pixel-art-fixer/) for
193
+ damaged inputs where a reliable grid no longer exists. PixelKiln does not yet
194
+ run either fixer automatically.
195
+
196
+ ### Quality-first resolution policy
197
+
198
+ Use 48×48 through 128×128 as the default native range for an independently
199
+ generated component with this tested stack. This is an operating range, not an
200
+ adapter restriction: ComfyUI may work on a 1024px canvas internally, and a wide
201
+ or tall asset may exceed one native axis when review supports it. Do not grow
202
+ both native dimensions merely because the machine can render them. This matches
203
+ the [Aseprite Diffusion author's published working range](https://www.reddit.com/r/PixelArt/comments/yv2q51/making_high_quality_game_tiles_in_less_than_a/)
204
+ of 48–128px, centered on a 64px native target, and our current 128px recovery.
205
+
206
+ Start with a deliberate 16–32 color project palette. Add colors only when they
207
+ improve readable depth, material, or lighting. After grid recovery, review the
208
+ asset at 1× and an integer zoom for silhouette, clusters, contours, single-pixel
209
+ noise, palette separation, and seams. High-confidence grid detection only
210
+ proves structure; it is not an aesthetic approval.
211
+
212
+ Test a proposed graph and prompt pattern on at least two different scene
213
+ families. One prompt can clean up one subject and damage another. Generate a
214
+ small candidate set, reject any image that misses required objects, and keep the
215
+ prompt and workflow only when the final native files improve consistently.
216
+
217
+ Stop increasing resolution when clusters become soft, gradients replace
218
+ intentional ramps, or important forms stop reading at 1×. Keep the smaller
219
+ result when it is clearer. See the [quality gates](./QUALITY.md) for the human
220
+ review checklist.
221
+
222
+ ## Build larger environments
223
+
224
+ Do not ask the model for one enormous finished level. Generate and review the
225
+ scene as 48–128px native-grid parts:
226
+
227
+ - sky and atmosphere;
228
+ - distant mountains;
229
+ - midground terrain and forest;
230
+ - buildings and landmarks;
231
+ - foreground framing and gameplay tiles.
232
+
233
+ Keep one grid origin, native scale, and palette contract across the parts, then
234
+ compose them at 1×. This preserves editable clusters and lets you regenerate one
235
+ weak region without touching the rest of the scene.
236
+
237
+ ComfyUI's official [outpainting workflow](https://docs.comfy.org/tutorials/basic/outpaint)
238
+ can extend a canvas. The official
239
+ [crop-and-stitch nodes](https://github.com/comfyorg/comfyui-crop-and-stitch) can
240
+ sample a region at the model's working size and blend it back.
241
+ [Tiled diffusion](https://github.com/comfyorg/comfyui-tiled-diffusion) can cover
242
+ a larger semantic canvas with overlapping windows. These techniques help
243
+ composition and regional detail; none guarantees a native pixel grid. Run grid
244
+ recovery after accepting each layer or the final composite. Check licenses
245
+ before shipping: the linked tiled implementation marks its MultiDiffusion,
246
+ Mixture of Diffusers, and tiled VAE code as non-commercial share-alike.
247
+
248
+ Do not add a latent refinement pass by default. We tested `LatentUpscale` to
249
+ 1536px and 2048px, low-denoise resampling, and tiled VAE decode. Every version
250
+ completed on the 64 GB M1 Max, but the extra interpolation, diffusion, and VAE
251
+ round trip visibly blurred the shapes. Reducing the result to 64 colors did not
252
+ restore the lost structure.
253
+
254
+ The neural [ComfyUI Pixelization](https://github.com/DarioFT/ComfyUI-Pixelization)
255
+ node is another possible raster-to-pixel-art step, but its underlying model is
256
+ limited to non-commercial research use. It is not a safe default for a general
257
+ game-asset pipeline.
258
+
259
+ ### What each technique can and cannot do
260
+
261
+ | Technique | Useful for | Limitation |
262
+ |---|---|---|
263
+ | [Pixel Art Fixer](https://github.com/Retro-Diffusion/pixel-art-fixer) | Recovering a native grid from softened, non-integer, or oversized pseudo-pixel art | Classical detection can fail when the grid is badly damaged or cells are very small |
264
+ | [ComfyUI Pixelization](https://github.com/DarioFT/ComfyUI-Pixelization) | Turning ordinary digital art into sharper, cell-controlled pixel art | Underlying model is non-commercial research only and may damage existing pixel art |
265
+ | [Outpainting](https://docs.comfy.org/tutorials/basic/outpaint) | Extending the scene beyond its current borders | Produces more raster canvas, not a guaranteed pixel grid |
266
+ | [Crop and Stitch](https://github.com/comfyorg/comfyui-crop-and-stitch) | Repairing one region at the model's preferred resolution | Blending and resampling still need native-grid normalization |
267
+ | [Tiled diffusion](https://github.com/comfyorg/comfyui-tiled-diffusion) | Panoramas, regional prompts, and canvases larger than working memory | The linked implementation has non-commercial components and does not enforce pixel cells |
268
+ | [MMPX](https://jcgt.org/published/0010/02/04/paper.pdf) | Magnifying true native pixel art while preserving its style | Assumes the input is already real pixel art; it cannot recover a fake grid |
269
+
270
+ That makes the deterministic fixer the best current structural fallback after
271
+ ComfyUI, not a quality generator. Use outpainting, regional generation, or tiles
272
+ to solve composition first. Recover the grid next, enforce palette and alpha
273
+ rules after that, perform the human art review, and reserve nearest-neighbor or
274
+ MMPX for presentation of an already-valid native asset.
275
+
80
276
  ## Configure the manifest
81
277
 
82
278
  Put dimensions on each asset. Put workflow configuration under
@@ -163,14 +359,16 @@ the portable reference against the current `COMFYUI_BASE_URL`.
163
359
  - PixelKiln does not install checkpoints or custom nodes. Every machine running
164
360
  the project must provide the models and nodes named by the workflow. The
165
361
  benchmark workflows use only core ComfyUI nodes.
362
+ - PixelKiln does not yet run background removal, native-grid recovery, final
363
+ palette enforcement, or aesthetic review as one automated pipeline. Until
364
+ those external or manual steps pass, a generated PNG remains source material.
166
365
 
167
366
  For large mountains, buildings, and backgrounds, model choice and working
168
367
  resolution matter more than the provider label. The SDXL benchmark produced a
169
368
  coherent 384px cliff fortress and two layered environments where the starter
170
- SD1.5 workflow did not. It still returned opaque isolated assets and thousands
171
- of source colors, so transparency and palette reduction remain separate art
172
- pipeline steps. Benchmark the exact committed workflow before assigning it a
173
- production batch.
369
+ SD1.5 workflow did not. Those results still required manual structural and
370
+ visual review. Benchmark the exact committed workflow on more than one subject
371
+ before assigning it a production batch.
174
372
 
175
373
  ## Troubleshooting
176
374
 
@@ -185,6 +383,9 @@ production batch.
185
383
  - **Out of memory:** lower asset dimensions or batch size, or change the
186
384
  workflow. PixelKiln's 4096px ceiling is a schema limit, not a promise that a
187
385
  particular machine can render that canvas.
386
+ - **The result looks pixelated but muddy:** reject it as source material. Do not
387
+ upscale it or accept it because grid detection succeeds. Compare a different
388
+ model, prompt pattern, or smaller native target on at least two scene types.
188
389
 
189
390
  ComfyUI's official server route reference documents the `/prompt`,
190
391
  `/history/{prompt_id}`, `/view`, and `/system_stats` endpoints used by this
@@ -71,7 +71,9 @@ provider options and current limits, or
71
71
  For self-hosted generation, set `provider` to `comfyui`, commit an API-format
72
72
  workflow, and bind the inputs PixelKiln may replace. Local ComfyUI jobs use a
73
73
  zero `free` budget, which describes the lack of a metered provider charge, not
74
- the cost of hardware or electricity. See [Set up ComfyUI](COMFYUI.md).
74
+ the cost of hardware or electricity. ComfyUI is not the shortest path to
75
+ game-ready pixel art: use it only when local control justifies manual grid
76
+ recovery, palette enforcement, and art review. See [Set up ComfyUI](COMFYUI.md).
75
77
 
76
78
  The provider setup guides give the shortest complete path for
77
79
  [PixelLab](PIXELLAB.md), [Retro Diffusion](RETRO_DIFFUSION.md), and
package/docs/MANIFEST.md CHANGED
@@ -178,7 +178,9 @@ input constraints are checked during the free planning phase.
178
178
 
179
179
  ComfyUI runs a committed API-format workflow on a self-hosted server. The
180
180
  workflow file is resolved relative to the manifest and its parsed content is
181
- part of the spec hash.
181
+ part of the spec hash. Adapter success proves transport and output structure,
182
+ not pixel-art quality. The tested workflows still need manual native-grid,
183
+ final-palette, prompt-coverage, and human 1× checks.
182
184
 
183
185
  ```jsonc
184
186
  {
@@ -219,7 +221,9 @@ Node IDs come from the exported workflow; they are not stable across unrelated
219
221
  workflows. The current adapter supports `map`, PNG output from one node, 1–16
220
222
  candidates, and dimensions from 16–4096px. It rejects manifest `styleImages`
221
223
  and `palette`; keep those controls inside the workflow. See
222
- [Set up ComfyUI](COMFYUI.md) for the complete procedure and limits.
224
+ [Set up ComfyUI](COMFYUI.md) for the complete procedure, safe workflow, and
225
+ quality limits. The 4096px adapter ceiling is not a recommended generation or
226
+ native-art size.
223
227
 
224
228
  ## Asset fields
225
229
 
@@ -4,8 +4,8 @@ This benchmark compares PixelLab and Retro Diffusion on five game-art briefs,
4
4
  with a four-brief ComfyUI extension using a named SDXL stack. Three briefs use
5
5
  256×256 output; two use 384×384 to test larger buildings and environment
6
6
  backgrounds. The hosted providers have two attempts per brief. ComfyUI has one
7
- attempt on each supported brief. Prompt text and seed numbers match, but seeds
8
- are not portable between models.
7
+ baseline and one post-processed attempt on each supported brief. Prompt text
8
+ and seed numbers match, but seeds are not portable between models.
9
9
 
10
10
  The benchmark tests the adapters that PixelKiln ships. It does not rank every
11
11
  model or endpoint sold by either provider.
@@ -164,19 +164,75 @@ workflows use core ComfyUI nodes, generate at 1024×1024, and finish with
164
164
  |---|---|---|---|
165
165
  | ![ComfyUI mountain observatory](../website/public/benchmarks/provider-environments/comfyui/isolated/a/mountain-observatory.png) | ![ComfyUI cliffside fortress](../website/public/benchmarks/provider-environments/comfyui/isolated/a/cliffside-fortress.png) | ![ComfyUI alpine valley](../website/public/benchmarks/provider-environments/comfyui/background/a/alpine-valley.png) | ![ComfyUI volcanic pass](../website/public/benchmarks/provider-environments/comfyui/background/a/volcanic-pass.png) |
166
166
 
167
- The observatory and fortress are the strongest architectural results in this
168
- small sample. The fortress has a clear entrance, tower hierarchy, stairs, and a
167
+ The observatory and fortress have the clearest architecture in this small
168
+ sample. The fortress has a clear entrance, tower hierarchy, stairs, and a
169
169
  single readable footprint. The alpine scene keeps the river, village, tree
170
170
  line, and distant ridges separate. The volcanic scene is dramatic and legible,
171
171
  but it drops the requested basalt fortress, the same prompt-coverage failure
172
- seen in both hosted providers.
172
+ seen in both hosted providers. These composition strengths do not make the
173
+ files finished pixel art.
173
174
 
174
175
  The trade-off is production cleanup. All four ComfyUI PNGs are opaque. The two
175
176
  isolated files use 16,811 and 31,572 RGB colors, while the backgrounds use
176
177
  36,248 and 50,985. They look pixelated because of the LoRA and nearest-exact
177
178
  reduction, but they are not indexed, low-palette sprites. Add explicit
178
- background removal and palette quantization when the target art direction
179
- requires them.
179
+ background removal, native-grid recovery, final palette quantization, and human
180
+ review before treating them as game assets.
181
+
182
+ ### ComfyUI post-processing result
183
+
184
+ The follow-up graph keeps the generation settings fixed and changes only the
185
+ cleanup nodes. BiRefNet removes the isolated backgrounds, and ComfyUI's core
186
+ quantizer limits every image to 64 colors without dithering.
187
+
188
+ | Original observatory | Cleanup experiment | Original fortress | Cleanup experiment |
189
+ |---|---|---|---|
190
+ | ![Original opaque ComfyUI mountain observatory](../website/public/benchmarks/provider-environments/comfyui/isolated/a/mountain-observatory.png) | ![Transparent 64-color ComfyUI mountain observatory](../website/public/benchmarks/provider-postprocessing/comfyui/isolated/mountain-observatory.png) | ![Original opaque ComfyUI cliffside fortress](../website/public/benchmarks/provider-environments/comfyui/isolated/a/cliffside-fortress.png) | ![Transparent 64-color ComfyUI cliffside fortress](../website/public/benchmarks/provider-postprocessing/comfyui/isolated/cliffside-fortress.png) |
191
+
192
+ | Original alpine valley | 64-color alpine valley | Original volcanic pass | 64-color volcanic pass |
193
+ |---|---|---|---|
194
+ | ![Original ComfyUI alpine valley](../website/public/benchmarks/provider-environments/comfyui/background/a/alpine-valley.png) | ![64-color ComfyUI alpine valley](../website/public/benchmarks/provider-postprocessing/comfyui/background/alpine-valley.png) | ![Original ComfyUI volcanic pass](../website/public/benchmarks/provider-environments/comfyui/background/a/volcanic-pass.png) | ![64-color ComfyUI volcanic pass](../website/public/benchmarks/provider-postprocessing/comfyui/background/volcanic-pass.png) |
195
+
196
+ The cutouts retained their silhouettes while reaching 60% and 62% transparent
197
+ pixels. They use 55 and 58 RGB colors instead of 16,811 and 31,572. The scenic
198
+ images fell to 64 and 60 colors without losing their main depth bands. The
199
+ committed [post-processing project](../benchmarks/provider-postprocessing/comfyui/README.md)
200
+ contains the workflows, manifest, audit commands, and provenance. These outputs
201
+ still need native-grid recovery and final palette enforcement. They are not a
202
+ finished production path.
203
+
204
+ ### ComfyUI resolution result
205
+
206
+ A second benchmark keeps the alpine brief and seed fixed while separating the
207
+ model's generation canvas from the actual editable pixel grid.
208
+
209
+ | SDXL source | Recovered native art | Wide SDXL source | Recovered wide art |
210
+ |---|---|---|---|
211
+ | ![ComfyUI 1024px raster with pseudo-pixel texture](../website/public/benchmarks/provider-hires/comfyui/baseline-64/alpine-valley.png) | ![ComfyUI alpine valley reconstructed onto a 128 by 128 pixel grid](../website/public/benchmarks/provider-hires/comfyui/native-grid/alpine-valley-128x128.png) | ![ComfyUI 1344 by 768 wide raster with pseudo-pixel texture](../website/public/benchmarks/provider-hires/comfyui/native-wide-64/alpine-valley-wide.png) | ![ComfyUI wide alpine valley reconstructed onto a 168 by 96 pixel grid](../website/public/benchmarks/provider-hires/comfyui/native-grid/alpine-valley-wide-168x96.png) |
212
+
213
+ The 1024×1024 source carried an implied 8px cell and resolved to a 128×128
214
+ native grid. The 1344×768 source used the same cell step and resolved to 168×96.
215
+ Retro Diffusion Pixel Art Fixer reported high-confidence consensus for both.
216
+ The reconstructed outputs contain 48 colors and one stored pixel per recovered
217
+ cell.
218
+
219
+ That is a structural result, not an aesthetic endorsement. Grid recovery cannot
220
+ turn weak composition, painterly gradients, or muddy source clusters into good
221
+ pixel art. These files remain review candidates, and the 1024px source should
222
+ not be presented as a high-resolution pixel-art deliverable. For this tested
223
+ stack, 48–128px native components are the default operating range; larger
224
+ environments should be assembled from reviewed parts with one palette and grid.
225
+
226
+ This invalidated our earlier 2048px nearest-neighbor result. That file perfectly
227
+ duplicated the source raster, including its fake, softened cells. It was a larger
228
+ delivery file, not better pixel art, and has been removed from the showcase.
229
+
230
+ Earlier 1536px and 2048px latent refinements also looked blurred. The extra
231
+ interpolation and resampling softened the structure; color quantization could
232
+ not repair it. The committed
233
+ [resolution project](../benchmarks/provider-hires/comfyui/README.md) contains
234
+ the two provider workflows, source outputs, native reconstructions, fixer
235
+ report, audit instructions, and lock provenance.
180
236
 
181
237
  ## Cost and operational results
182
238
 
@@ -184,7 +240,7 @@ requires them.
184
240
  |---|---:|---:|---:|
185
241
  | PixelLab | 10 | 10 generations | 4,411 generations |
186
242
  | Retro Diffusion | 10 | $0.744 | $9.73 |
187
- | ComfyUI | 4 | 0 `free` PixelKiln units | No account balance |
243
+ | ComfyUI | 10 | 0 `free` PixelKiln units | No account balance |
188
244
 
189
245
  PixelLab charged one generation per image. Retro Diffusion quoted and charged
190
246
  $0.058 for each 256px RD Plus image and $0.099 for each 384px RD Plus image;
@@ -199,8 +255,9 @@ The run also caught two integration details:
199
255
  quote precision, so planning remains a safe ceiling.
200
256
 
201
257
  All three manifests now pass `doctor` and report a current plan. The hosted
202
- projects have ten healthy PNG cache entries each; the ComfyUI extension has
203
- four.
258
+ projects have ten healthy PNG cache entries each; the ComfyUI projects have
259
+ four baseline, four cleanup, and two resolution-test entries. Three additional
260
+ native-grid PNGs are deterministic post-processing results, not provider jobs.
204
261
 
205
262
  ## Recommendation
206
263
 
@@ -214,18 +271,28 @@ For full scenic backgrounds, start with PixelLab Pixflux. These two attempts
214
271
  were cheaper and more faithful to the brief. Try Retro Diffusion when you want
215
272
  foreground framing and a closer illustrated scene.
216
273
 
217
- Try the tested ComfyUI SDXL stack when local control and larger compositions
218
- matter more than ready-to-place transparency. It produced the best large
219
- building in this run and a strong layered valley, with no provider charge. It
220
- also took roughly 90 seconds per 1024px render on the tested Apple MPS machine,
221
- and every output still needs palette review.
274
+ Try ComfyUI when local control and custom composition work matter enough to
275
+ justify manual cleanup. The tested SDXL stack produced a strong building and
276
+ layered valley, but its large files only imitated a pixel grid. Its cleanup
277
+ graph and native-grid recovery are diagnostic steps, not a production preset.
278
+ A one-pass 1024px render took roughly 60 to 90 seconds on the tested Apple MPS
279
+ machine. Recover the native grid, enforce the final palette afterward, and
280
+ review prompt coverage and pixel clusters by hand. The tested latent-upscale
281
+ passes blurred the art, while nearest-neighbor scaling only duplicated its
282
+ pseudo-pixels.
283
+
284
+ Do not choose the current ComfyUI stack only because it has no provider charge.
285
+ It carries the most local setup and manual validation in this comparison. Test
286
+ any proposed prompt pattern on at least two scene families; a universal cleanup
287
+ prompt can improve one subject while degrading another.
222
288
 
223
289
  Do not ask any provider for one giant finished level. Generate terrain,
224
- background, buildings, landmarks, and foreground pieces separately. Compose
225
- them in the engine, then use integer nearest-neighbor scaling for display.
290
+ background, buildings, landmarks, and foreground pieces separately. Normalize
291
+ them to one native grid, compose at 1×, then use integer nearest-neighbor scaling
292
+ for display.
226
293
 
227
294
  This sample is useful, not definitive. Two attempts expose obvious tendencies,
228
295
  but they do not measure every style, prompt family, or model update. The new
229
296
  volcanic brief also shows why prompt coverage needs review at the object level:
230
- all four images lost the requested fortress. Rerun the committed manifests when
231
- either provider changes its models.
297
+ all providers lost the requested fortress. Rerun the committed manifests when
298
+ a provider or local model changes.
package/docs/QUALITY.md CHANGED
@@ -63,6 +63,29 @@ measured member-by-member with stable role-qualified ids. Standard
63
63
  non-interlaced greyscale, indexed, RGB, greyscale-alpha, and RGBA PNGs are
64
64
  normalized to RGBA before measurement.
65
65
 
66
+ ## Human pixel-art gate
67
+
68
+ The audit catches measurable drift; it does not decide whether an image is good
69
+ pixel art. A grid-aligned file can still contain painterly gradients, noisy
70
+ single-pixel marks, weak silhouettes, or clusters inherited from a blurred
71
+ source. Review every candidate at its native 1× size and at an integer zoom.
72
+
73
+ For each candidate, verify:
74
+
75
+ - every required subject and landmark from the brief is present and readable;
76
+ - the silhouette and focal point read at 1×;
77
+ - clusters look deliberate instead of averaged or smeared;
78
+ - contours do not contain accidental stair-steps or isolated noise;
79
+ - the palette separates depth and gameplay-relevant shapes;
80
+ - transparency and tile seams are clean when applicable;
81
+ - the asset still fits the project's shared grid, palette, and perspective.
82
+
83
+ Reject a candidate that fails those checks even when dimensions, hashes,
84
+ transparency, palette count, and grid recovery all pass. For the tested ComfyUI
85
+ pixel-art stack, begin with 48–128px native components and compose larger scenes
86
+ from reviewed parts. Apply the final palette after grid recovery. Resolution is
87
+ a ceiling imposed by quality, not a target.
88
+
66
89
  ## Cache integrity gate
67
90
 
68
91
  ```bash
package/docs/README.md CHANGED
@@ -12,7 +12,7 @@ This source also renders at
12
12
  | [Getting started](./GETTING_STARTED.md) | Install from a checkout, create or adopt a project, run the everyday workflow, and decide what belongs in Git. |
13
13
  | [Set up PixelLab](./PIXELLAB.md) | Configure the production provider, choose a generator, and use its account workflows. |
14
14
  | [Set up Retro Diffusion](./RETRO_DIFFUSION.md) | Configure the experimental provider, choose a style, and understand its live-tested boundary. |
15
- | [Set up ComfyUI](./COMFYUI.md) | Connect a self-hosted server, install the tested SDXL pixel-art stack, and bind a committed workflow. |
15
+ | [Set up ComfyUI](./COMFYUI.md) | Bind a local composition workflow and understand the manual quality boundary. |
16
16
  | [CLI reference](./CLI.md) | Every command and flag, offline/provider requirements, JSON output, and exit behavior. |
17
17
  | [Manifest reference](./MANIFEST.md) | Every style and asset field, inheritance, generator-specific constraints, mounting, and schema validation. |
18
18
  | [Agent workflows](./AGENTS.md) | Install the official skill and pair agent guidance with the deterministic CLI. |
@@ -22,7 +22,7 @@ This source also renders at
22
22
  | Guide | Use it for |
23
23
  |---|---|
24
24
  | [Generators](./GENERATORS.md) | Choose between `map`, `1dir`, `pixflux`, and `tiles`; understand measured costs and capability trade-offs. |
25
- | [Environment provider benchmark](./PROVIDER_BENCHMARK.md) | Compare PixelLab, Retro Diffusion, and a named ComfyUI model stack on buildings and backgrounds. |
25
+ | [Environment provider benchmark](./PROVIDER_BENCHMARK.md) | Compare PixelLab, Retro Diffusion, and ComfyUI on buildings, backgrounds, cleanup, and native-grid recovery. |
26
26
  | [Derived artifacts](./ARTIFACTS.md) | Pack, mount, and export; provenance companions; ownership; force takeover; transactional and crash recovery. |
27
27
  | [Recovery and account safety](./RECOVERY.md) | Restore, caches, adopt, salvage, cross-project claims, tagging, and confirmed purge. |
28
28
  | [Quality gates](./QUALITY.md) | Plan, doctor, audit, cache checks, JSON contracts, and CI usage. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelkiln",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Manifest-driven pixel-art generation, review, recovery, and packaging with deterministic provenance.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -20,6 +20,9 @@ submission, reviewed by a human, and recorded with exact provenance.
20
20
  explicit `--budget` no higher than the authorized estimate.
21
21
  - Leave visual selection to the local `pixelkiln pick` review page unless the
22
22
  user explicitly provides a selection rule. Closing it applies nothing.
23
+ - Treat every ComfyUI output as source material until it passes the native-grid,
24
+ final-palette, prompt-coverage, and human 1× checks in the ComfyUI reference.
25
+ A successful PNG or high-confidence grid result is not quality approval.
23
26
  - Preserve manual edits and ownership errors. Inspect the difference before any
24
27
  `--force` operation.
25
28
  - Commit the manifest, lockfile, generated outputs, and derived artifact
@@ -3,12 +3,46 @@
3
3
  Read this reference before operating a PixelKiln manifest whose provider is
4
4
  `comfyui`.
5
5
 
6
+ ## Position it honestly
7
+
8
+ The ComfyUI adapter automates a committed graph, candidate review, provenance,
9
+ and recovery. It does not make a general image model produce good pixel art.
10
+ Use it when local control, private inputs, or a custom graph justify manual art
11
+ direction. Do not call the current SDXL plus Pixel Art XL setup production-ready
12
+ or game-ready.
13
+
14
+ If the user mainly wants the shortest path to usable pixel art, compare the
15
+ specialized hosted providers first. Choose ComfyUI when owning the workflow is
16
+ worth the extra model testing and cleanup.
17
+
18
+ ## Minimal safe path
19
+
20
+ 1. Generate two to four candidates on the model's normal working canvas.
21
+ 2. Reject weak composition and missing prompt elements before post-processing.
22
+ 3. For isolated art, remove the background at full resolution.
23
+ 4. Recover one native pixel per detected cell.
24
+ 5. Quantize the recovered native image to the project's final palette, usually
25
+ 16–32 colors without dithering to start.
26
+ 6. Review the native file at 1× and an integer zoom. Check silhouette, clusters,
27
+ contours, single-pixel noise, palette separation, alpha, and seams.
28
+ 7. Accept the smallest clear result. For the tested stack, start with 48–128px
29
+ native components and compose larger scenes from reviewed parts.
30
+
31
+ PixelKiln does not automate steps 3–6 yet. Say so. Do not present the generated
32
+ working canvas, a nearest-neighbor resize, or a grid-recovery result as the
33
+ finished asset.
34
+
35
+ Test a workflow on at least two different scene families before recommending
36
+ it. A prompt that reduced noise in the alpine benchmark increased noise in the
37
+ volcanic benchmark and still missed the requested fortress.
38
+
39
+ ## Connection and workflow contract
40
+
6
41
  ComfyUI is self-hosted and needs no provider credential. Never assume the
7
- server is running or reachable. `pixelkiln doctor --dry-run` validates the
8
- workflow and bindings offline; `pixelkiln doctor` checks the configured server
9
- through its read-only system-stats route. The default URL is
10
- `http://127.0.0.1:8188`; `COMFYUI_BASE_URL` overrides it. Do not advise exposing
11
- an unauthenticated ComfyUI server to a public network.
42
+ server is reachable. `pixelkiln doctor --dry-run` validates workflow bindings
43
+ offline; `pixelkiln doctor` checks the read-only system-stats route. The default
44
+ URL is `http://127.0.0.1:8188`; `COMFYUI_BASE_URL` overrides it. Keep an
45
+ unauthenticated server off public networks.
12
46
 
13
47
  The style's `providerOptions.comfyui` must name a committed API-format workflow,
14
48
  one image output node, the expected candidate count, and bindings for prompt,
@@ -22,7 +56,9 @@ the `map` generator, PNG output from one node, 1–16 candidates, and dimensions
22
56
  from 16–4096px. Manifest `styleImages` and `palette` are unsupported; those
23
57
  controls belong in the workflow.
24
58
 
25
- For the tested higher-quality pixel-art stack, use SDXL Base 1.0 as
59
+ ## Tested evidence, not a preset
60
+
61
+ The diagnostic stack uses SDXL Base 1.0 as
26
62
  `sd_xl_base_1.0.safetensors` and Pixel Art XL as
27
63
  `pixel-art-xl.safetensors`. The repository's
28
64
  `benchmarks/provider-environments/comfyui/` project names both files and uses
@@ -32,6 +68,30 @@ PNG still matches the manifest dimensions. The isolated workflow uses LoRA
32
68
  strength 1.0, while the environment workflow uses 0.85. Read
33
69
  `docs/COMFYUI.md` for download links, checksums, licenses, and measured limits.
34
70
 
71
+ The cleanup experiment in
72
+ `benchmarks/provider-postprocessing/comfyui/` runs BiRefNet on the decoded
73
+ full-resolution image, quantizes RGB separately, joins the inverted background
74
+ mask as alpha, and scales last. It proves those nodes run; it is not the complete
75
+ recommended pipeline. Background removal belongs before grid recovery. Final
76
+ palette quantization belongs after grid recovery. Always audit the final native
77
+ file, because reconstruction can introduce averaged colors.
78
+
79
+ The boundary experiment in
80
+ `benchmarks/provider-hires/comfyui/` keeps generation canvas, native art grid,
81
+ and display size separate. Pixel Art XL can make a 1024px raster whose implied
82
+ cells resolve to a much smaller editable grid. Nearest-neighbor scaling
83
+ preserves those fake cells; it does not repair them. Reconstruct accepted output
84
+ at 1× with a grid-aware tool such as Retro Diffusion Pixel Art Fixer, then
85
+ compose and edit the native PNG. Record the fixer revision, source and output
86
+ hashes, detected grid, confidence, and dimensions.
87
+
88
+ Do not add `LatentUpscale` and a second sampling pass by default. The tested
89
+ 1536px and 2048px variants blurred the output. Nearest-neighbor scaling preserves
90
+ existing cells but cannot repair them. Grid recovery proves structure, not good
91
+ clusters or prompt coverage.
92
+
93
+ ## Operation and recovery
94
+
35
95
  The plan reports `0 free` and generation uses `--budget 0`. Explain that this
36
96
  means no metered API charge. Hardware, electricity, hosting, and model licenses
37
97
  can still cost money.
@@ -41,6 +101,6 @@ The lockfile records a prompt ID, output node, workflow hash, and portable
41
101
  cache is missing, the current ComfyUI server must still retain the history
42
102
  output so PixelKiln can resolve the portable source.
43
103
 
44
- For the complete setup, quality stack, benchmark, and troubleshooting, use
104
+ For the complete setup, composition stack, benchmark, and troubleshooting, use
45
105
  `docs/COMFYUI.md` or
46
106
  <https://pixelkiln.griffen.codes/docs/comfyui>.
@@ -46,6 +46,8 @@ that produced it.
46
46
  A practical split is PixelLab for prompt-sensitive buildings and mature account
47
47
  recovery, then Retro Diffusion for environment-styled backdrops, clean cutouts,
48
48
  or native animation. ComfyUI fits private work, local models, and custom graph
49
- control, but its result depends on the exact workflow, model, nodes, and
50
- hardware. The committed hosted-provider benchmark is evidence for tendencies,
51
- not a guarantee. Run one representative asset before expanding any batch.
49
+ control when the user accepts manual native-grid recovery, final palette
50
+ enforcement, and art review. Start with a specialized hosted provider when
51
+ minimizing cleanup matters more than local control. The committed benchmark is
52
+ evidence for tendencies, not a guarantee. Run one representative asset before
53
+ expanding any batch, and test a ComfyUI graph on at least two scene families.