pixelkiln 0.13.0 → 0.15.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
@@ -1,17 +1,23 @@
1
1
  # Provider comparison
2
2
 
3
- PixelKiln can route one manifest through PixelLab, Retro Diffusion, and a
4
- self-hosted ComfyUI server. Planning, review, recovery, and packaging stay the
5
- same. Each adapter handles its service's authentication, prices, request
3
+ PixelKiln can route one manifest through PixelLab, Retro Diffusion, Scenario,
4
+ and a self-hosted ComfyUI server. Planning, review, recovery, and packaging stay
5
+ the same. Each adapter handles its service's authentication, prices, request
6
6
  lifecycle, and file formats.
7
7
 
8
8
  PixelLab remains the default so existing manifests and spec hashes remain
9
9
  compatible. The manifest's top-level `provider` is the default; a style may
10
10
  override it. Keep service settings under the matching `providerOptions` key.
11
11
 
12
+ Provider choice and release quality are separate. Any supported single-image
13
+ style can declare one `quality` profile for native-grid recovery, a closed
14
+ palette, measurable checks, and named approval. The profile does not change the
15
+ provider request or its cost. Pack and mount use only approved derived PNGs.
16
+
12
17
  To configure a project, use [Set up PixelLab](./docs/PIXELLAB.md),
13
- [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md), or
14
- [Set up ComfyUI](./docs/COMFYUI.md). This page focuses on choosing between
18
+ [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md),
19
+ [Set up ComfyUI](./docs/COMFYUI.md), or
20
+ [Set up Scenario](./docs/SCENARIO.md). This page focuses on choosing between
15
21
  them.
16
22
 
17
23
  ## Support status
@@ -21,6 +27,7 @@ them.
21
27
  | PixelLab | Production; paid generation and account workflows live-tested | `PIXELLAB_API_KEY` | generations |
22
28
  | Retro Diffusion | Experimental; authenticated paid still generation, download, provenance, and recovery live-tested; advanced workflows pending | `RD_API_KEY` | USD |
23
29
  | ComfyUI | Experimental; local single-image generation, four-candidate queue, provenance, and cache-only recovery live-tested on Apple MPS | none; optional `COMFYUI_BASE_URL` | free |
30
+ | Scenario | Experimental; BFL Flux 2 Dev authentication, CU preflight, paid single/two-output generation, review, download, and durable recovery live-tested | `SCENARIO_SDK_API_KEY` and `SCENARIO_SDK_API_SECRET` | compute-units |
24
31
  | FakeProvider | Test-only deterministic lifecycle | none | free |
25
32
 
26
33
  Live tests now cover single-candidate RD Fast and RD Plus stills from cost quote
@@ -35,6 +42,13 @@ ComfyUI's `free` unit means PixelKiln cannot identify a metered provider
35
42
  charge. It does not count hardware, hosting, electricity, or model-license
36
43
  costs.
37
44
 
45
+ Scenario planning uses the manifest's conservative `maxComputeUnits` value.
46
+ Immediately before paid work, the adapter asks Scenario for a free live quote
47
+ using the identical request. The first live smoke quoted and billed 16 CU for
48
+ one image and 32 CU for two. Human selection and a forced provider restore both
49
+ passed. The smoke is separate from the visual comparison because it uses a
50
+ different brief.
51
+
38
52
  ## PixelLab vs. Retro Diffusion
39
53
 
40
54
  This comparison describes the adapters PixelKiln ships today, not every feature
@@ -81,17 +95,38 @@ the same graph and still differ because their checkpoint bytes, custom nodes,
81
95
  or sampler settings differ. Commit the workflow and record the model stack used
82
96
  to test it.
83
97
 
98
+ ## Where Scenario fits
99
+
100
+ Scenario adds hosted third-party models and reusable project-specific models
101
+ without requiring a local GPU. PixelKiln's first adapter intentionally covers
102
+ only the part that fits its existing still-image pipeline.
103
+
104
+ | Decision | Scenario through PixelKiln |
105
+ |---|---|
106
+ | Best fit today | A controlled one-asset spike using a hosted model or project LoRA with a hard CU ceiling |
107
+ | PixelKiln generator | `map` stills |
108
+ | Output | One to four PNG candidates, 128–2048px in multiples of 16 |
109
+ | Cost model | Manifest `maxComputeUnits`, command budget, then free authoritative preflight before each paid request |
110
+ | Recovery | Durable job and asset IDs refresh temporary signed original-file URLs |
111
+ | Account lifecycle | Read-only connectivity check; no balance, list, adopt, salvage, tag, or purge yet |
112
+ | Confidence | BFL Flux 2 Dev live-tested through quote, billing, single/two-output jobs, human selection, PNG download, and provider-backed restore; other model schemas remain unverified |
113
+
114
+ Scenario model schemas differ. The current adapter sends prompt, width, height,
115
+ output count, optional seed, and explicitly declared JSON parameters. Verify
116
+ the chosen model accepts that shape before spending. Use
117
+ [Set up Scenario](./docs/SCENARIO.md) for the safe first-run sequence.
118
+
84
119
  ## Large environments, mountains, and buildings
85
120
 
86
121
  Start by deciding whether the result is an isolated map object or a complete
87
122
  background. That distinction matters more than raw canvas size.
88
123
 
89
- | Asset type | PixelLab | Retro Diffusion | ComfyUI |
90
- |---|---|---|---|
91
- | 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. |
92
- | 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. |
93
- | 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. |
94
- | 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. |
124
+ | Asset type | PixelLab | Retro Diffusion | ComfyUI | Scenario |
125
+ |---|---|---|---|---|
126
+ | 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. | The live BFL smoke produced a readable 512px keep, but it was opaque and used 19,619 colors. Use that profile for concepts or refinement input, not a finished limited-palette asset. A project-specific model may improve consistency but needs its own smoke. |
127
+ | 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. | The BFL profile accepts canvases up to 2048px, but no Scenario scenic brief has passed the shared benchmark. Treat that as model-canvas capacity, not native pixel resolution. Start with one 512px concept before raising size or steps. |
128
+ | 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. | Scenario's project models and LoRAs are the main reason to use it for a set. PixelKiln can pin the model ID and parameters, but its first live run covers only the public BFL profile. |
129
+ | 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. | Scenario can request a larger raster from a compatible model, but the same rule applies: generate reusable layers at their useful native detail, compose at 1×, and integer-upscale only the final scene. |
95
130
 
96
131
  For a production environment, build a kit: seamless terrain, separate
97
132
  landmarks and buildings, foreground occluders, and a distant backdrop. You can
@@ -116,15 +151,16 @@ repeatable.
116
151
  ## Use multiple providers in one project
117
152
 
118
153
  Set a provider on any style that differs from the manifest default. Planning
119
- and confirmations remain grouped by provider and unit, so PixelLab generations
120
- and Retro Diffusion dollars are never added together. A mixed run takes a
121
- separate named ceiling for each paid provider; the free group may be explicit:
154
+ and confirmations remain grouped by provider and unit, so PixelLab generations,
155
+ Retro Diffusion dollars, Scenario Compute Units, and local free work are never
156
+ added together. A mixed run takes a separate named ceiling for each paid
157
+ provider; the free group may be explicit:
122
158
 
123
159
  ```bash
124
160
  pixelkiln plan
125
161
  pixelkiln gen \
126
162
  --budget pixellab=12 \
127
- --budget retrodiffusion=0.20 \
163
+ --budget scenario=60 \
128
164
  --budget comfyui=0
129
165
  ```
130
166
 
@@ -169,6 +205,12 @@ style, and candidate count affect the exact still-image quote. Treat
169
205
  as the authoritative submit-time check. See Retro Diffusion's
170
206
  [official API examples and pricing formulas](https://github.com/Retro-Diffusion/api-examples#pricing).
171
207
 
208
+ Scenario uses Compute Units rather than USD in the API contract. Costs vary by
209
+ model and inputs, so the manifest records a conservative per-asset ceiling
210
+ instead of a stale formula. PixelKiln records Scenario's live dry-run quote and
211
+ final job billing separately. The first BFL Flux 2 Dev smoke measured 16 CU for
212
+ one 512px output and 32 CU for two with 28 inference steps.
213
+
172
214
  ## Capability boundary
173
215
 
174
216
  The provider boundary owns behavior that differs between services:
@@ -197,30 +239,29 @@ PixelLab, an animation style to Retro Diffusion, and a private model workflow
197
239
  to ComfyUI. Provider-keyed budgets, independent orchestration, lock-authoritative
198
240
  recovery, and explicit account-provider selection ship with it.
199
241
 
200
- Scenario remains the best next hosted provider candidate. The implementation
201
- scope and acceptance criteria are tracked in
202
- [GitHub issue #52](https://github.com/gfargo/pixelkiln/issues/52).
242
+ The Scenario still-image adapter from
243
+ [GitHub issue #52](https://github.com/gfargo/pixelkiln/issues/52) now has mocked
244
+ edge coverage and a paid BFL Flux 2 Dev lifecycle smoke. It remains
245
+ experimental until more model schemas and representative art briefs pass.
203
246
 
204
247
  | Candidate | What it adds | Fit with PixelKiln | Main cost or risk | Priority |
205
248
  |---|---|---|---|---:|
206
- | Scenario | Custom-trained style models, references, image editing, background removal, upscaling, and managed assets | Async jobs, asset IDs, and free `dryRun` cost estimates map closely to PixelKiln's plan/submit/poll/download lifecycle | API access requires a paid plan; auth uses both an API key and secret, so the provider factory must describe more than one credential | 1 |
249
+ | Scenario comparable benchmark | Custom-trained style models and hosted third-party generation | Tests the same environment briefs now that CU accounting, review, PNG output, and signed-URL recovery are proven | Model schemas differ, and the first live smoke is not directly comparable to the existing provider set | 1 |
207
250
  | ComfyUI Cloud | Managed execution of workflow graphs without running a local GPU | Could reuse part of the workflow model, but authentication, endpoints, billing, and lifecycle must remain separate from the local adapter | Treating cloud as a base-URL swap would hide real security and cost differences | 2 |
208
251
  | fal | A large hosted model catalog, including pixel-art style controls, LoRAs, editing, upscaling, and background removal | Queue-based requests and model schemas are accessible through one client | Model-specific schemas and prices move the adapter toward a marketplace abstraction rather than one stable art workflow | 3 |
209
252
 
210
- Scenario is the next hosted spike because its [custom generation API](https://docs.scenario.com/get-started/generation/third-party-model-generation)
211
- returns an asynchronous job ID, its [generation surface](https://docs.scenario.com/get-started/documentation/key-capabilities-at-a-glance)
212
- supports custom models and image references, and its
253
+ Scenario's [custom generation API](https://docs.scenario.com/get-started/generation/third-party-model-generation)
254
+ returns asynchronous jobs, while its
213
255
  [Compute Unit guidance](https://help.scenario.com/articles/7934059476-api-usage-and-credits-compute-units)
214
- documents free cost preflights. That combination adds something the current
215
- providers do not: a project-specific visual model with a cost check that can be
216
- captured before submission.
256
+ documents free cost preflights. PixelKiln now maps those mechanics into its
257
+ normal plan, submit, poll, review, fetch, and restore lifecycle.
217
258
 
218
259
  Recommended order from here:
219
260
 
220
261
  1. Finish live Retro Diffusion multi-candidate, tileset, GIF, and spritesheet
221
262
  smoke tests.
222
- 2. Build the Scenario still-image spike from issue #52 with dry-run cost, submit, poll,
223
- download, and one custom-model or reference-image benchmark.
263
+ 2. Run the shared environment briefs through Scenario, then add one custom-model
264
+ or project-LoRA benchmark.
224
265
  3. Benchmark another pinned ComfyUI model and prompt pattern across at least two
225
266
  scene families. Reject any improvement that helps only one subject.
226
267
  4. Design ComfyUI Cloud as a separate authenticated and billable adapter.
package/README.md CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  ![PixelKiln](https://wp.griffen.codes/wp-content/uploads/2026/08/download.png)
4
4
 
5
- [Website](https://pixelkiln.griffen.codes) ·
6
- [Documentation](https://pixelkiln.griffen.codes/docs) ·
7
- [GitHub](https://github.com/gfargo/pixelkiln)
5
+ [Website](https://pixelkiln.griffen.codes) · [Documentation](https://pixelkiln.griffen.codes/docs) · [GitHub](https://github.com/gfargo/pixelkiln)
8
6
 
9
7
  Generate pixel art from a manifest, review it locally, recover paid work, and
10
8
  package the accepted files for a game engine.
@@ -15,16 +13,17 @@ local contact sheet, and commit the source and output hashes. No LLM chooses
15
13
  what to run or which image wins. The CLI handles provider calls, polling,
16
14
  hashing, downloads, and file placement.
17
15
 
18
- PixelLab is the production backend. Retro Diffusion and self-hosted ComfyUI are
19
- experimental. The Retro Diffusion adapter has live coverage for RD Fast and RD
20
- Plus stills; its multi-candidate, tileset, GIF, and spritesheet paths are tested
21
- with fixtures but still need paid live runs. ComfyUI has passed local generation,
22
- four-candidate review, cache recovery, and native-grid refinement on Apple MPS.
23
- Its tested SDXL workflow can find a composition, but it is not a finished
24
- pixel-art preset. Styles in one manifest may use different providers with
25
- separate budget ceilings. The [provider comparison](./PROVIDERS.md) lists the tested
26
- limits and the best route for buildings and environments. `FakeProvider` covers
27
- the same contract in automated tests.
16
+ PixelLab is the production backend. Retro Diffusion, self-hosted ComfyUI, and
17
+ Scenario are experimental. Retro Diffusion has live coverage for RD Fast and
18
+ RD Plus stills; its other paths still need paid live runs. ComfyUI has passed
19
+ local generation, candidate review, recovery, and native-grid refinement on
20
+ Apple MPS. Its tested SDXL workflow finds compositions, not finished pixel art.
21
+ Scenario has passed CU preflight, generation, human review, and durable restore
22
+ with BFL Flux 2 Dev.
23
+
24
+ Styles may use different providers with separate budget ceilings. The
25
+ [provider comparison](./PROVIDERS.md) lists the tested limits and best routes.
26
+ `FakeProvider` covers the shared contract in automated tests.
28
27
 
29
28
  ## Release
30
29
 
@@ -60,7 +59,7 @@ PixelKiln keeps the missing record:
60
59
  | Existing-art onboarding | Manifest scaffolding, exact-hash account adoption, and prompt recovery. |
61
60
  | Recovery | Validated local content cache, durable provider-reference restore, account object-hash cache, and resumable jobs. |
62
61
  | Shared-account safety | Cross-project claim files or a registered workspace catalog, sibling-style exclusion, reviewed salvage, keep/discard tags, separate confirmed purge. |
63
- | Quality control | Palette distance, transparency, color-count, relative outlier, cache-integrity, and doctor gates. |
62
+ | Quality control | Manifest-native grid recovery, closed palettes, named approval, regression baselines, and fail-closed packaging. |
64
63
  | Sprite packaging | Deterministic RGBA packing, stable-cell mounting, explicit external input lists, structural output roles. |
65
64
  | Engine export | Lossless generic tile contract, Tiled Wang sets, and Godot 4 terrain sets. |
66
65
  | Artifact integrity | Portable source/output hashes, canonical fingerprints, manual-edit protection, transactional promotion, crash journal recovery. |
@@ -68,8 +67,9 @@ PixelKiln keeps the missing record:
68
67
 
69
68
  ### Local human review
70
69
 
71
- `pixelkiln pick` opens an actual local candidate sheet; the orchestration layer
72
- never asks a model to choose artwork for you.
70
+ `pixelkiln pick` opens a local candidate sheet. It preserves each image's aspect
71
+ ratio, fits large work without blurring small sprites, and never asks a model to
72
+ choose artwork for you.
73
73
 
74
74
  ![PixelKiln candidate review UI](./website/public/review-ui-showcase.jpg)
75
75
 
@@ -106,10 +106,11 @@ Put a hosted provider's credential in `.env.local` beside the manifest:
106
106
  ```dotenv
107
107
  # PixelLab (the default provider)
108
108
  PIXELLAB_API_KEY=...
109
-
110
109
  # Or Retro Diffusion when `provider` is `retrodiffusion`
111
110
  RD_API_KEY=...
112
-
111
+ # Scenario needs both values when `provider` is `scenario`
112
+ SCENARIO_SDK_API_KEY=...
113
+ SCENARIO_SDK_API_SECRET=...
113
114
  # Self-hosted ComfyUI needs no key; override its local URL only when needed
114
115
  COMFYUI_BASE_URL=http://127.0.0.1:8188
115
116
  ```
@@ -137,8 +138,9 @@ pixelkiln plan
137
138
 
138
139
  See [Getting started](./docs/GETTING_STARTED.md) for new and existing projects.
139
140
  Use [Set up PixelLab](./docs/PIXELLAB.md),
140
- [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md), or
141
- [Set up ComfyUI](./docs/COMFYUI.md) for provider-specific configuration,
141
+ [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md),
142
+ [Set up ComfyUI](./docs/COMFYUI.md), or
143
+ [Set up Scenario](./docs/SCENARIO.md) for provider-specific configuration,
142
144
  manifest examples, and current limits. See [Mixed-provider projects](./docs/MIXED_PROVIDERS.md)
143
145
  when styles in one manifest need different backends.
144
146
 
@@ -186,19 +188,16 @@ set. Generator choice, reference-image bytes, dimensions, palette, seed, and
186
188
  prompt settings participate in deterministic spec identity. A manifest may
187
189
  select another provider and pass namespaced `providerOptions`; see
188
190
  [Set up PixelLab](./docs/PIXELLAB.md),
189
- [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md), and
190
- [Set up ComfyUI](./docs/COMFYUI.md). The
191
+ [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md),
192
+ [Set up ComfyUI](./docs/COMFYUI.md), and
193
+ [Set up Scenario](./docs/SCENARIO.md). The
191
194
  [provider comparison](./PROVIDERS.md) covers costs,
192
- current confidence, and limitations. The committed ComfyUI projects now include
193
- transparent cutouts, palette-controlled backgrounds, wide environment canvases,
194
- and native-grid recovery for model output that only looks like pixel art. The
195
- ComfyUI guidance is quality-first: start with 48–128px native components,
196
- apply the final palette after grid recovery, require prompt-coverage and human
197
- cluster-and-silhouette review, and compose larger scenes from accepted parts
198
- instead of chasing a larger raster. Background removal and the art decision
199
- still need the graph and a person. `pixelkiln refine` now handles grid recovery,
200
- final palette enforcement, measurable checks, and the hash-bound approval
201
- record.
195
+ current confidence, and limitations. ComfyUI works best as a composition tool:
196
+ start with 48–128px native components and build larger scenes from accepted
197
+ parts. Any single-image style can declare a `quality` profile for grid recovery,
198
+ a closed palette, measurable checks, and named human approval. `plan --check`,
199
+ `pack`, and `mount` then fail closed when that derived output is missing or
200
+ stale. Changing the profile never schedules another provider generation.
202
201
 
203
202
  Versioned recipes capture tested workflows, model hashes, license links, and
204
203
  manifest-ready styles with quality boundaries. Start with `pixelkiln recipe install comfyui/pixel-art-xl-environment@1.0.0`.
@@ -224,11 +223,10 @@ pixelkiln restore
224
223
  pixelkiln audit --check --max-distance 35 --min-transparency 0.1
225
224
  pixelkiln cache --check
226
225
 
227
- # Provider-neutral pixel cleanup after selecting a generated candidate.
228
- pixelkiln refine --from candidate.png --out art/native.png \
229
- --palette "#141b1e,#23312a,#384d4f,#526a8d,#709fcf,#865c45,#c6a766,#f1bb70"
230
- pixelkiln refine approve --from art/native.pixelkiln.json --reviewer "Your Name"
231
- pixelkiln refine check --from art/native.pixelkiln.json
226
+ # Build and verify the quality output declared by style.quality.
227
+ pixelkiln refine --style base
228
+ pixelkiln refine approve --from assets/final/anvil.pixelkiln.json --reviewer "Your Name"
229
+ pixelkiln refine check --style base
232
230
  ```
233
231
 
234
232
  Repeated `--style`, `--only`, `--claims`, and `--output-role` filters
@@ -255,27 +253,25 @@ replace a hard palette or reference-image constraint. See
255
253
  Generator names describe PixelKiln workflows; their exact capabilities and
256
254
  prices depend on the selected provider. Retro Diffusion also supports the
257
255
  provider-specific `animation` generator. ComfyUI currently supports `map`
258
- through an operator-supplied workflow. Compare the adapters in the
259
- [provider comparison](./PROVIDERS.md).
256
+ through an operator-supplied workflow. Scenario currently supports `map`
257
+ with a required offline CU ceiling and a live quote before each paid call.
258
+ Compare the adapters in the [provider comparison](./PROVIDERS.md).
260
259
 
261
260
  ## Derived artifacts
262
261
 
263
262
  ```bash
264
263
  # Deterministic sheet + atlas + provenance.
265
264
  pixelkiln pack --style base
266
-
267
265
  # Stable declared cells in an existing sheet.
268
266
  pixelkiln mount --style ground
269
-
270
267
  # Structural atlas + engine metadata + provenance.
271
268
  pixelkiln export --style ground --only terrain --format tiled
272
269
  ```
273
270
 
274
- Pack, mount, and export write managed bundles. A `.pixelkiln.json` companion
275
- records portable source paths/hashes, layout/export options, output hashes, and
276
- a canonical fingerprint. Existing unowned output is adopted only when already
277
- byte-identical; manual edits stop the whole write unless `--force` explicitly
278
- takes ownership.
271
+ Pack, mount, and export write managed bundles. When a style has a quality
272
+ profile, pack and mount consume only its current approved PNGs and include their
273
+ records in provenance. Existing unowned output is adopted only when already
274
+ byte-identical; manual edits stop the whole write unless `--force` takes ownership.
279
275
 
280
276
  All changing members stage before promotion. Ordinary failures roll back.
281
277
  Abrupt termination leaves a validated transaction journal: the next invocation
@@ -339,16 +335,14 @@ import {
339
335
  loadManifest,
340
336
  resolveSpecs,
341
337
  } from "pixelkiln"
342
-
343
338
  const loaded = await loadManifest("pixelkiln.manifest.json")
344
339
  const specs = await resolveSpecs(loaded)
345
340
  const plan = await buildPlan(specs, await loadLock("pixelkiln.lock.json"))
346
-
347
341
  console.log(plan.groups, plan.actionable.length)
348
342
  ```
349
343
 
350
- The package also exports audit and image-regression gates, provider-neutral refinement, lock/output
351
- helpers, provider contracts, pipeline stages, sprite packing/mounting, tile
344
+ The package also exports audit and image-regression gates, quality-profile
345
+ inspection and refinement, lock/output helpers, provider contracts, sprite packing/mounting, tile
352
346
  exporters, managed artifact writes, and offline provenance verification. See
353
347
  [Library API](./docs/LIBRARY.md).
354
348
 
@@ -361,9 +355,10 @@ exporters, managed artifact writes, and offline provenance verification. See
361
355
  | [Set up PixelLab](./docs/PIXELLAB.md) | Production-provider credentials, manifest, generators, and account workflows. |
362
356
  | [Set up Retro Diffusion](./docs/RETRO_DIFFUSION.md) | Experimental-provider credentials, styles, formats, cost checks, and limits. |
363
357
  | [Set up ComfyUI](./docs/COMFYUI.md) | Experimental self-hosted server, workflow bindings, local cost semantics, and limits. |
358
+ | [Set up Scenario](./docs/SCENARIO.md) | Experimental hosted models, two-part credentials, CU preflight, review, and durable downloads. |
364
359
  | [Versioned recipes](./docs/RECIPES.md) | Pinned workflow packs, model hashes, manifest templates, and quality contracts. |
365
360
  | [CLI reference](./docs/CLI.md) | Every command, flag, JSON mode, and exit contract. |
366
- | [Manifest reference](./docs/MANIFEST.md) | Every style/asset field and generator constraint. |
361
+ | [Manifest reference](./docs/MANIFEST.md) | Style/asset fields, quality profiles, and generator constraints. |
367
362
  | [Mixed-provider projects](./docs/MIXED_PROVIDERS.md) | Per-style routing, provider-keyed budgets, recovery, and account commands. |
368
363
  | [Agent workflows](./docs/AGENTS.md) | Official skill install, operating model, and provider-aware safety. |
369
364
  | [Generators](./docs/GENERATORS.md) | Capability choice, measured costs, palettes, style references, and tiles. |
package/SECURITY.md CHANGED
@@ -34,7 +34,8 @@ credentials in their query string. Reports involving authentication leakage, pat
34
34
  cross-origin review actions, HTML/script injection, unsafe overwrite/delete
35
35
  behavior, lockfile corruption, or budget bypass are security relevant.
36
36
 
37
- Never attach a real `PIXELLAB_API_KEY`, `RD_API_KEY`, `.env` file, private
37
+ Never attach a real `PIXELLAB_API_KEY`, `RD_API_KEY`, `SCENARIO_SDK_API_KEY`,
38
+ `SCENARIO_SDK_API_SECRET`, `.env` file, private
38
39
  provider URL, or unredacted lockfile from a confidential project to a public
39
40
  report.
40
41
 
package/dist/cli.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
- type GridConfidence = "low" | "medium" | "high";
2
+ import { z } from 'zod';
3
+
4
+ declare const GridConfidenceSchema: z.ZodEnum<["low", "medium", "high"]>;
5
+ type GridConfidence = z.infer<typeof GridConfidenceSchema>;
3
6
 
4
7
  type TilesetFormat = "generic" | "tiled" | "godot";
5
8