pixelkiln 0.4.1 → 0.6.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/CONTRIBUTING.md CHANGED
@@ -11,6 +11,7 @@ Requires Node.js 20 or newer.
11
11
 
12
12
  ```bash
13
13
  npm ci
14
+ npm run test:release
14
15
  npm run typecheck
15
16
  npm run test:docs
16
17
  npm test
@@ -114,6 +115,17 @@ short-lived credential, and the npm CLI performs the exchange itself during
114
115
  signed provenance attestation linking the tarball to its source commit and
115
116
  workflow run.
116
117
 
118
+ The release job is serialized so two quick merges cannot publish concurrently,
119
+ and it times out after 20 minutes rather than holding publishing permission
120
+ indefinitely. `npm run test:release` checks the repository-side trust contract:
121
+ the OIDC permission, GitHub-hosted runner, registry configuration, full checkout
122
+ history, absence of an npm publishing token, and the expected release plugins.
123
+
124
+ The public `gfargo/skills` tap watches PixelKiln releases on an hourly schedule.
125
+ When a new tag appears, it mirrors the tagged `skills/pixelkiln/` directory,
126
+ bumps the games plugin, and publishes a games release. PixelKiln remains the
127
+ source of truth; the source repository needs no cross-repository write token.
128
+
117
129
  Two conditions have to hold on the npm side, and neither lives in this
118
130
  repository:
119
131
 
package/PROVIDERS.md CHANGED
@@ -78,7 +78,58 @@ provider unit. Seeds are provider-specific, so equal seed numbers do not make
78
78
  the outputs directly reproducible across services.
79
79
 
80
80
  See the [environment provider benchmark](./docs/PROVIDER_BENCHMARK.md) for the
81
- twelve generated images, prompts, manifests, measured costs, and review.
81
+ twenty generated images, prompts, manifests, measured costs, and review. The
82
+ 384×384 additions test a larger cliffside building and a full volcanic
83
+ background.
84
+
85
+ ## Use both providers in one project
86
+
87
+ One manifest selects one provider. PixelKiln does not currently support a
88
+ provider override on an individual style or asset. The boundary is deliberate:
89
+ one command constructs one account adapter, and one `--budget` must have one
90
+ meaning. PixelLab generations and Retro Diffusion dollars cannot share a safe
91
+ ceiling.
92
+
93
+ A repository can still use both providers today. Give each provider its own
94
+ manifest, lockfile, and output directory:
95
+
96
+ ```text
97
+ art/
98
+ pixelkiln.pixellab.manifest.json
99
+ pixelkiln.pixellab.lock.json
100
+ pixelkiln.retrodiffusion.manifest.json
101
+ pixelkiln.retrodiffusion.lock.json
102
+ pixelkiln.workspace.json
103
+ ```
104
+
105
+ Plan and authorize each manifest separately:
106
+
107
+ ```bash
108
+ pixelkiln plan --manifest art/pixelkiln.pixellab.manifest.json --lock art/pixelkiln.pixellab.lock.json
109
+ pixelkiln gen --manifest art/pixelkiln.pixellab.manifest.json --lock art/pixelkiln.pixellab.lock.json --budget <generations>
110
+
111
+ pixelkiln plan --manifest art/pixelkiln.retrodiffusion.manifest.json --lock art/pixelkiln.retrodiffusion.lock.json
112
+ pixelkiln gen --manifest art/pixelkiln.retrodiffusion.manifest.json --lock art/pixelkiln.retrodiffusion.lock.json --budget <usd>
113
+ ```
114
+
115
+ Register both manifests in the workspace catalog for aggregate status and
116
+ complete claim checks. Keep the provider lockfiles separate. Package their
117
+ reviewed outputs independently, or combine explicit files with `pixelkiln pack
118
+ --inputs <file> --out <path>`.
119
+
120
+ This is a useful split when PixelLab handles prompt-sensitive buildings and
121
+ account recovery while Retro Diffusion handles environment-styled backdrops,
122
+ clean cutouts, or native animation. Retro Diffusion is not a higher-resolution
123
+ route through PixelKiln today: its useful environment styles cap at 384×384,
124
+ while PixelLab `map` reaches 400×400. Its advantage is the model/style and
125
+ output type, not raw dimensions.
126
+
127
+ Native mixed-provider support inside one manifest would be a larger feature,
128
+ not a schema-only change. It needs provider selection on each style, plans and
129
+ confirmations grouped by provider and cost unit, separate budget ceilings,
130
+ per-provider polling and downloads, and an explicit provider for account-wide
131
+ commands. The lockfile already records a provider on every entry, so the state
132
+ format can support that direction without merging provider identities.
82
133
 
83
134
  ## Cost comparison
84
135
 
@@ -118,16 +169,56 @@ is interpreted in the active provider's unit. Providers without a balance or
118
169
  account-management endpoint can still generate safely because the offline
119
170
  estimate and hard budget remain enforced.
120
171
 
121
- ## Next validation and expansion
122
-
123
- 1. Complete representative paid Retro Diffusion multi-candidate, tileset, GIF,
124
- and spritesheet smoke tests without logging credentials. Single-candidate RD
125
- Fast and RD Plus still paths have passed end to end.
126
- 2. Promote only the workflows proven against the live service; keep unsupported
127
- account operations explicit capability errors.
128
- 3. Evaluate Scenario as another hosted game-asset provider.
129
- 4. Add a local ComfyUI adapter for GPU-backed, no-per-call-cost generation.
130
- 5. Consider general raster providers only with explicit nearest-neighbor,
172
+ ## What to build next
173
+
174
+ The highest-value next feature is native per-style provider routing, not a third
175
+ adapter. The benchmark now shows a useful split: PixelLab follows dense
176
+ building briefs more reliably, while Retro Diffusion returns cleaner cutouts
177
+ and strong close environment framing. Two manifests make that combination
178
+ possible, but awkward. One manifest should be able to send a building style to
179
+ PixelLab and a background or animation style to Retro Diffusion.
180
+
181
+ This needs provider-keyed budgets and confirmations, not a provider field added
182
+ in isolation. A safe plan must keep `4 generations` and `$0.40` separate,
183
+ construct and rate-limit each adapter independently, and require an explicit
184
+ provider for account-wide commands. The lockfile already records the provider
185
+ on each entry, so its identity model is ready for the change.
186
+
187
+ After that, Scenario is the best next hosted provider candidate.
188
+
189
+ | Candidate | What it adds | Fit with PixelKiln | Main cost or risk | Priority |
190
+ |---|---|---|---|---:|
191
+ | 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 |
192
+ | ComfyUI local/cloud | Reproducible workflow graphs, broad model choice, local GPU execution, and a cloud path using a compatible API | Workflow JSON could become a durable provenance input; jobs and output downloads already resemble the current provider boundary | Local cost has no universal provider unit; the cloud API is marked experimental and requires a subscription | 2 |
193
+ | 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 |
194
+
195
+ Scenario deserves the first spike because its [custom generation API](https://docs.scenario.com/get-started/generation/third-party-model-generation)
196
+ returns an asynchronous job ID, its [generation surface](https://docs.scenario.com/get-started/documentation/key-capabilities-at-a-glance)
197
+ supports custom models and image references, and its
198
+ [Compute Unit guidance](https://help.scenario.com/articles/7934059476-api-usage-and-credits-compute-units)
199
+ documents free cost preflights. That combination adds something the current
200
+ providers do not: a project-specific visual model with a cost check that can be
201
+ captured before submission.
202
+
203
+ ComfyUI should follow. Its [local server API](https://docs.comfy.org/development/overview)
204
+ would cover private or offline GPU workflows, while the
205
+ [cloud API](https://docs.comfy.org/development/cloud/overview) accepts the same
206
+ workflow-shaped requests and exposes asynchronous jobs. The adapter needs an
207
+ explicit budget policy before implementation. A local run could report planned
208
+ image count and measured execution time, but it must not pretend those values
209
+ are a portable dollar estimate.
210
+
211
+ Recommended order:
212
+
213
+ 1. Add per-style provider selection, provider-keyed budgets, and mixed-provider
214
+ integration tests.
215
+ 2. Finish live Retro Diffusion multi-candidate, tileset, GIF, and spritesheet
216
+ smoke tests.
217
+ 3. Build a narrow Scenario still-image spike with dry-run cost, submit, poll,
218
+ download, and one custom-model or reference-image benchmark.
219
+ 4. Define local and cloud budget semantics for ComfyUI, then prototype one
220
+ versioned workflow.
221
+ 5. Consider general raster marketplaces only with explicit nearest-neighbor,
131
222
  palette, transparency, and reproducibility checks.
132
223
 
133
224
  Midjourney is not an adapter target without an official public API. Automating
package/README.md CHANGED
@@ -25,9 +25,9 @@ tileset, GIF, and spritesheet live runs remain. See
25
25
  large environment and building workflows.
26
26
  `FakeProvider` exercises the same contract deterministically in tests.
27
27
 
28
- > **Release status:** the package is pre-1.0 and the first npm publication is
29
- > tracked in [issue #1](https://github.com/gfargo/pixelkiln/issues/1). Until it
30
- > is live, use a repository checkout.
28
+ > **Release status:** PixelKiln is published on npm. Merges to `main` use
29
+ > Semantic Release and npm Trusted Publishing, with signed provenance and no
30
+ > long-lived npm publishing token.
31
31
 
32
32
  ## Why PixelKiln
33
33
 
@@ -76,21 +76,18 @@ a row unresolved. Nothing is applied when the window is closed without using
76
76
  **Apply selections**. See the [CLI reference](docs/CLI.md#pick) for the complete
77
77
  review workflow.
78
78
 
79
- ## Install from a checkout
79
+ ## Install
80
80
 
81
81
  Requires Node.js 20 or newer.
82
82
 
83
83
  ```bash
84
- git clone https://github.com/gfargo/pixelkiln.git
85
- cd pixelkiln
86
- npm ci
87
- npm run pixelkiln -- help
88
- npm test
84
+ npm install --save-dev pixelkiln
85
+ npx pixelkiln --help
89
86
  ```
90
87
 
91
- `npm run pixelkiln -- …` executes the TypeScript source. `npm run build`
92
- creates the ESM, CommonJS, declarations, and CLI distribution used by the
93
- published package.
88
+ For library use, both `import("pixelkiln")` and `require("pixelkiln")` are
89
+ supported. Contributors can still run `npm run pixelkiln -- …` from a checkout
90
+ to execute the TypeScript source directly.
94
91
 
95
92
  ## Five-minute start
96
93
 
@@ -114,14 +111,11 @@ RD_API_KEY=...
114
111
  Validate locally, inspect exact work/cost, then generate with a hard ceiling:
115
112
 
116
113
  ```bash
117
- /path/to/pixelkiln/node_modules/.bin/tsx /path/to/pixelkiln/src/cli.ts doctor --dry-run
118
- /path/to/pixelkiln/node_modules/.bin/tsx /path/to/pixelkiln/src/cli.ts plan
119
- /path/to/pixelkiln/node_modules/.bin/tsx /path/to/pixelkiln/src/cli.ts gen --budget 120
114
+ npx pixelkiln doctor --dry-run
115
+ npx pixelkiln plan
116
+ npx pixelkiln gen --budget 120
120
117
  ```
121
118
 
122
- Once installed from npm, those commands become `pixelkiln doctor`,
123
- `pixelkiln plan`, and `pixelkiln gen`.
124
-
125
119
  `gen` submits, polls, opens the candidate-review sheet when necessary,
126
120
  downloads validated output, populates the recovery cache, and updates
127
121
  `pixelkiln.lock.json`. Commit the manifest, lockfile, generated art, and any
@@ -342,7 +336,7 @@ writes, and offline provenance verification. See [Library API](./docs/LIBRARY.md
342
336
  | [Manifest reference](./docs/MANIFEST.md) | Every style/asset field and generator constraint. |
343
337
  | [Agent workflows](./docs/AGENTS.md) | Official skill install, operating model, and provider-aware safety. |
344
338
  | [Generators](./docs/GENERATORS.md) | Capability choice, measured costs, palettes, style references, and tiles. |
345
- | [Environment provider benchmark](./docs/PROVIDER_BENCHMARK.md) | Twelve matched outputs comparing buildings, landmarks, backgrounds, cost, and file readiness. |
339
+ | [Environment provider benchmark](./docs/PROVIDER_BENCHMARK.md) | Twenty matched outputs comparing buildings, landmarks, large backgrounds, cost, and file readiness. |
346
340
  | [Derived artifacts](./docs/ARTIFACTS.md) | Pack, mount, export, provenance, ownership, transactions, and recovery. |
347
341
  | [Recovery](./docs/RECOVERY.md) | Restore, caches, adopt, salvage, claims, and purge safety. |
348
342
  | [Quality gates](./docs/QUALITY.md) | Plan, doctor, audit, cache, JSON, and CI. |
package/docs/AGENTS.md CHANGED
@@ -59,6 +59,13 @@ new project or a large environment asset. Once chosen, follow
59
59
  [Set up PixelLab](./PIXELLAB.md) or
60
60
  [Set up Retro Diffusion](./RETRO_DIFFUSION.md).
61
61
 
62
+ The installed skill keeps the shared safety workflow in `SKILL.md` and loads a
63
+ focused reference only when needed: PixelLab, Retro Diffusion, or a project that
64
+ uses both. Mixed-provider repositories should use separate manifests and
65
+ lockfiles so each plan and budget keeps its provider-specific unit. The
66
+ [provider comparison](../PROVIDERS.md#use-both-providers-in-one-project) has a
67
+ complete layout and command example.
68
+
62
69
  ## Recommended first prompt
63
70
 
64
71
  ```text
@@ -11,18 +11,16 @@ checks need provider access.
11
11
  - Node.js 20 or newer
12
12
  - A credential for the manifest's selected provider: `PIXELLAB_API_KEY` for
13
13
  PixelLab or `RD_API_KEY` for experimental Retro Diffusion support
14
- - A repository checkout until the first npm release in
15
- [issue #1](https://github.com/gfargo/pixelkiln/issues/1) is complete
16
14
 
17
- From a checkout:
15
+ Install the published package in the project that owns the art:
18
16
 
19
17
  ```bash
20
- npm ci
21
- npm run pixelkiln -- help
18
+ npm install --save-dev pixelkiln
19
+ npx pixelkiln --help
22
20
  ```
23
21
 
24
- The rest of this guide uses `pixelkiln` for readability. In the checkout,
25
- replace it with `npm run pixelkiln --`.
22
+ The rest of this guide uses `pixelkiln` for readability. With a project-local
23
+ installation, prefix commands with `npx` or call them from an npm script.
26
24
 
27
25
  ## Using an agent
28
26
 
@@ -71,6 +69,9 @@ provider options and current limits, or
71
69
  [PixelLab vs. Retro Diffusion](../PROVIDERS.md) for selection guidance.
72
70
  The provider setup guides give the shortest complete path for
73
71
  [PixelLab](PIXELLAB.md) and [Retro Diffusion](RETRO_DIFFUSION.md).
72
+ If one repository needs both, use separate provider-specific manifests and
73
+ lockfiles. See
74
+ [Use both providers in one project](../PROVIDERS.md#use-both-providers-in-one-project).
74
75
 
75
76
  Before spending anything, validate and price the selected work:
76
77
 
@@ -1,8 +1,10 @@
1
1
  # Environment provider benchmark
2
2
 
3
- This benchmark compares PixelLab and Retro Diffusion on three 256×256 game-art
4
- briefs. Each brief has two attempts. The test uses the same prompt text and seed
5
- numbers for both providers, but seeds are not portable between models.
3
+ This benchmark compares PixelLab and Retro Diffusion on five game-art briefs.
4
+ Three briefs use 256×256 output; two use 384×384 to test larger buildings and
5
+ environment backgrounds. Each brief has two attempts. The test uses the same
6
+ prompt text and seed numbers for both providers, but seeds are not portable
7
+ between models.
6
8
 
7
9
  The benchmark tests the adapters that PixelKiln ships. It does not rank every
8
10
  model or endpoint sold by either provider.
@@ -14,10 +16,12 @@ model or endpoint sold by either provider.
14
16
  | Mountain observatory | `map`, high top-down view | `rd_plus__isometric_asset` | Isolated building on a snowy ridge |
15
17
  | River gate | `map`, low top-down view | `rd_plus__topdown_asset` | Isolated landmark spanning water |
16
18
  | Alpine valley | `pixflux`, background kept | `rd_plus__environment` | Full scenic background |
19
+ | Cliffside fortress | `map`, high top-down view | `rd_plus__isometric_asset` | Large isolated building complex |
20
+ | Volcanic pass | `pixflux`, background kept | `rd_plus__environment` | Full scenic background with reusable depth planes |
17
21
 
18
- Both manifests request 256×256 output with seeds `31415` and `27182`. The
19
- provider-specific route or style is allowed to do its job. No image was picked,
20
- edited, cropped, or post-processed.
22
+ Both manifests use seeds `31415` and `27182`. The provider-specific route or
23
+ style is allowed to do its job. No image was picked, edited, cropped, or
24
+ post-processed.
21
25
 
22
26
  PixelLab rejected `view: "isometric"` on the `map` endpoint with HTTP 422. The
23
27
  successful observatory attempts use the supported `high top-down` view while
@@ -93,15 +97,67 @@ For this brief, PixelLab wins on prompt coverage, graphic clarity, consistency,
93
97
  and cost. Retro Diffusion wins if the desired result is a closer, more cinematic
94
98
  scene.
95
99
 
100
+ ## Cliffside fortress at 384×384
101
+
102
+ Prompt: `a large fortified monastery built into a sheer mountain cliff,
103
+ isometric three-quarter view, central stone keep, two side towers, terraced
104
+ stairs, copper roofs, isolated with no scenery`
105
+
106
+ | PixelLab A | PixelLab B | Retro Diffusion A | Retro Diffusion B |
107
+ |---|---|---|---|
108
+ | ![PixelLab cliffside fortress attempt A](../website/public/benchmarks/provider-environments/pixellab/isolated/a/cliffside-fortress.png) | ![PixelLab cliffside fortress attempt B](../website/public/benchmarks/provider-environments/pixellab/isolated/b/cliffside-fortress.png) | ![Retro Diffusion cliffside fortress attempt A](../website/public/benchmarks/provider-environments/retrodiffusion/isolated/a/cliffside-fortress.png) | ![Retro Diffusion cliffside fortress attempt B](../website/public/benchmarks/provider-environments/retrodiffusion/isolated/b/cliffside-fortress.png) |
109
+
110
+ The larger canvas helped both providers. PixelLab used most of the frame and
111
+ kept the cliff, stairs, central keep, and tower structure legible. Attempt B is
112
+ the clearest match for a fortified monastery. Both outputs still include an
113
+ opaque gray field, and their 246 and 249 colors would need deliberate cleanup
114
+ for a tightly controlled palette.
115
+
116
+ Retro Diffusion improved markedly over its 256×256 observatory attempts. Both
117
+ results read as substantial cliffside compounds, and attempt B makes good use
118
+ of the full canvas. They are ready-to-place transparent cutouts with 75% and
119
+ 52% transparent pixels and only 55 and 49 colors. PixelLab is more reliable on
120
+ the exact architectural brief. Retro Diffusion is closer to a finished modular
121
+ map asset.
122
+
123
+ ## Volcanic pass at 384×384
124
+
125
+ Prompt: `a wide volcanic mountain pass at dawn, layered black peaks, glowing
126
+ lava river, basalt fortress in the middle distance, smoke plumes, full-bleed
127
+ parallax background with open sky`
128
+
129
+ | PixelLab A | PixelLab B | Retro Diffusion A | Retro Diffusion B |
130
+ |---|---|---|---|
131
+ | ![PixelLab volcanic pass attempt A](../website/public/benchmarks/provider-environments/pixellab/background/a/volcanic-pass.png) | ![PixelLab volcanic pass attempt B](../website/public/benchmarks/provider-environments/pixellab/background/b/volcanic-pass.png) | ![Retro Diffusion volcanic pass attempt A](../website/public/benchmarks/provider-environments/retrodiffusion/background/a/volcanic-pass.png) | ![Retro Diffusion volcanic pass attempt B](../website/public/benchmarks/provider-environments/retrodiffusion/background/b/volcanic-pass.png) |
132
+
133
+ PixelLab produced broader compositions with open sky and visibly separated
134
+ mountain planes. Attempt A includes the smoke plume and a clear volcano; attempt
135
+ B simplifies the scene into a graphic basin. Neither attempt includes a
136
+ recognizable fortress. Attempt A also contains a generated signature-like mark
137
+ in the lower-right corner, so it is not usable without cleanup. The files use
138
+ 44 and 26 colors.
139
+
140
+ Retro Diffusion made the pass and lava river unmistakable in both attempts. Its
141
+ narrow canyon framing is strong for a scene the player enters, but it leaves
142
+ less open sky and fewer obvious planes for a distant backdrop. It also dropped
143
+ the fortress and most of the smoke detail. The files use 26 and 25 colors.
144
+
145
+ None of these four files is a finished parallax package. They are flattened,
146
+ opaque scenes. PixelLab gives an artist clearer depth bands to cut apart; Retro
147
+ Diffusion gives the stronger single-frame canyon. A production workflow should
148
+ generate or extract the sky, distant peaks, middle ground, and foreground as
149
+ separate assets.
150
+
96
151
  ## Cost and operational results
97
152
 
98
153
  | Provider | Successful images | Charged amount | Final balance |
99
154
  |---|---:|---:|---:|
100
- | PixelLab | 6 | 6 generations | 4,415 generations |
101
- | Retro Diffusion | 6 | $0.348 | $0.135 |
155
+ | PixelLab | 10 | 10 generations | 4,411 generations |
156
+ | Retro Diffusion | 10 | $0.744 | $9.73 |
102
157
 
103
158
  PixelLab charged one generation per image. Retro Diffusion quoted and charged
104
- $0.058 per RD Plus image.
159
+ $0.058 for each 256px RD Plus image and $0.099 for each 384px RD Plus image;
160
+ PixelKiln's hard ceiling rounds the latter to $0.10 per image.
105
161
 
106
162
  The run also caught two integration details:
107
163
 
@@ -111,15 +167,16 @@ The run also caught two integration details:
111
167
  $0.057768 to $0.058. PixelKiln now rounds offline estimates up to the live
112
168
  quote precision, so planning remains a safe ceiling.
113
169
 
114
- Both manifests now pass `doctor`, report a current plan, and have six healthy
170
+ Both manifests now pass `doctor`, report a current plan, and have ten healthy
115
171
  PNG cache entries.
116
172
 
117
173
  ## Recommendation
118
174
 
119
175
  For large isolated buildings or landmarks, start with PixelLab when prompt
120
176
  coverage matters most. Budget for background cleanup. Start with Retro
121
- Diffusion when a transparent, compact, low-color asset matters more than
122
- capturing every noun in a complex prompt.
177
+ Diffusion when a transparent, low-color asset matters more than capturing every
178
+ noun in a complex prompt. At 384×384, Retro Diffusion can fill the frame with a
179
+ substantial structure rather than the compact cutouts seen in the first brief.
123
180
 
124
181
  For full scenic backgrounds, start with PixelLab Pixflux. These two attempts
125
182
  were cheaper and more faithful to the brief. Try Retro Diffusion when you want
@@ -130,5 +187,7 @@ background, buildings, landmarks, and foreground pieces separately. Compose
130
187
  them in the engine, then use integer nearest-neighbor scaling for display.
131
188
 
132
189
  This sample is useful, not definitive. Two attempts expose obvious tendencies,
133
- but they do not measure every style, prompt family, or model update. Rerun the
134
- committed manifests when either provider changes its models.
190
+ but they do not measure every style, prompt family, or model update. The new
191
+ volcanic brief also shows why prompt coverage needs review at the object level:
192
+ all four images lost the requested fortress. Rerun the committed manifests when
193
+ either provider changes its models.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelkiln",
3
- "version": "0.4.1",
3
+ "version": "0.6.0",
4
4
  "description": "Manifest-driven pixel-art generation, review, recovery, and packaging with deterministic provenance.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -29,6 +29,7 @@
29
29
  "typecheck": "tsc --noEmit",
30
30
  "test": "vitest run",
31
31
  "test:docs": "node scripts/check-docs.mjs",
32
+ "test:release": "node scripts/check-release.mjs",
32
33
  "test:package": "node scripts/smoke-package.mjs",
33
34
  "test:watch": "vitest",
34
35
  "schema": "tsx scripts/gen-schema.ts",
@@ -12,9 +12,7 @@ submission, reviewed by a human, and recorded with exact provenance.
12
12
 
13
13
  - Locate `pixelkiln.manifest.json` first. Paths are manifest-relative.
14
14
  - Never inspect, print, or commit provider credentials. Read the manifest's
15
- top-level `provider`: PixelKiln loads `PIXELLAB_API_KEY` for `pixellab` and
16
- `RD_API_KEY` for experimental `retrodiffusion` from `.env.local` beside the
17
- manifest or from the current working directory.
15
+ top-level `provider`, then load the matching provider reference below.
18
16
  - Run `pixelkiln doctor --dry-run` and `pixelkiln plan` before paid work. Report
19
17
  actionable, recoverable, and estimated cost figures with their provider unit.
20
18
  - Do not regenerate recoverable work. Use `pixelkiln restore` first.
@@ -43,11 +41,18 @@ debugging one phase. Use `restore` for missing bytes, `adopt` for exact matches
43
41
  already in the provider account, and `salvage` for reviewed unclaimed objects.
44
42
  Use `pack`, `mount`, or `export` only for the artifact format the project needs.
45
43
 
46
- PixelKiln's orchestration is provider-neutral. PixelLab is its production and
47
- paid-generation-tested adapter. Retro Diffusion stills, tileset sheets,
48
- animated GIFs, and PNG spritesheets are experimental. Authenticated RD Fast and
49
- RD Plus single-candidate stills have passed from quote through validated output
50
- and recovery. Advanced workflows remain mock-tested.
44
+ ## Provider routing
45
+
46
+ Read only the reference needed for the current decision:
47
+
48
+ - For PixelLab configuration, generators, costs, alpha behavior, or account
49
+ operations, read [references/pixellab.md](references/pixellab.md).
50
+ - For Retro Diffusion styles, USD budgets, environment assets, animation, or
51
+ experimental limits, read
52
+ [references/retro-diffusion.md](references/retro-diffusion.md).
53
+ - When one game or repository needs both providers, read
54
+ [references/mixed-providers.md](references/mixed-providers.md).
55
+
51
56
  `FakeProvider` is the deterministic test adapter. Do not describe Retro
52
57
  Diffusion as production-ready until representative multi-candidate, tileset,
53
58
  GIF, and spritesheet live smoke tests pass.
@@ -0,0 +1,43 @@
1
+ # Mixed-provider projects
2
+
3
+ Read this reference when one game or repository needs assets from both PixelLab
4
+ and Retro Diffusion.
5
+
6
+ One manifest selects one top-level `provider`. Do not add undocumented
7
+ per-style provider fields: the current CLI constructs one account adapter for a
8
+ manifest run, and a single `--budget` has one provider-specific unit.
9
+
10
+ Use one manifest and lockfile per provider inside the same project:
11
+
12
+ ```text
13
+ art/
14
+ pixelkiln.pixellab.manifest.json
15
+ pixelkiln.pixellab.lock.json
16
+ pixelkiln.retrodiffusion.manifest.json
17
+ pixelkiln.retrodiffusion.lock.json
18
+ pixelkiln.workspace.json
19
+ ```
20
+
21
+ Keep their output directories distinct. Plan and authorize them separately:
22
+
23
+ ```bash
24
+ pixelkiln plan --manifest art/pixelkiln.pixellab.manifest.json --lock art/pixelkiln.pixellab.lock.json
25
+ pixelkiln gen --manifest art/pixelkiln.pixellab.manifest.json --lock art/pixelkiln.pixellab.lock.json --budget <generations>
26
+
27
+ pixelkiln plan --manifest art/pixelkiln.retrodiffusion.manifest.json --lock art/pixelkiln.retrodiffusion.lock.json
28
+ pixelkiln gen --manifest art/pixelkiln.retrodiffusion.manifest.json --lock art/pixelkiln.retrodiffusion.lock.json --budget <usd>
29
+ ```
30
+
31
+ Register both manifests in the workspace catalog so aggregate status and claim
32
+ checks see the whole project. A mixed-provider warning is expected because it
33
+ prevents account-wide commands from silently assuming one backend.
34
+
35
+ Package each manifest's reviewed outputs independently, or use `pixelkiln pack
36
+ --inputs <file> --out <path>` with an explicit JSON list when the final sheet
37
+ must combine files from both providers. Never merge the two lockfiles or add
38
+ generation counts to USD. Each entry must retain the provider that produced it.
39
+
40
+ A practical split is PixelLab for prompt-sensitive buildings and mature account
41
+ recovery, then Retro Diffusion for environment-styled backdrops, clean cutouts,
42
+ or native animation. The committed benchmark is evidence for those tendencies,
43
+ not a guarantee; run one representative asset before expanding either batch.
@@ -0,0 +1,37 @@
1
+ # PixelLab
2
+
3
+ Read this reference when a manifest selects `pixellab`, when choosing between
4
+ providers, or before any PixelLab account operation.
5
+
6
+ ## Operational boundary
7
+
8
+ - Credential: `PIXELLAB_API_KEY` in `.env.local` beside the manifest or in the
9
+ process environment. Never print or commit it.
10
+ - Status: production adapter. Generation and account workflows have live
11
+ coverage.
12
+ - Cost unit: subscription generations. Copy the exact `pixelkiln plan` total
13
+ into `--budget`; do not translate it into dollars.
14
+ - Account operations: balance, adopt, salvage, tag, and separately confirmed
15
+ purge are supported. Read `docs/RECOVERY.md` before using them.
16
+
17
+ ## Generator choice
18
+
19
+ | Generator | Use it for | Measured cost |
20
+ |---|---|---:|
21
+ | `map` | One prop, icon, building, or landmark, up to 400×400 | 1 generation |
22
+ | `pixflux` | Closed palettes or full-bleed backgrounds | 1 generation |
23
+ | `1dir` | Reference-guided work or several candidates | 20–40 generations |
24
+ | `tiles` | Ground variations or connected structures | 20–40 generations |
25
+
26
+ In the committed environment benchmark, PixelLab followed complex building
27
+ prompts more closely and produced broader, more separable depth bands in scenic
28
+ backgrounds. Its 256px and 384px map objects were opaque despite the route's
29
+ transparency claim, so inspect alpha on one representative result before a
30
+ batch. Inspect scenic outputs for stray marks too: one untouched 384px attempt
31
+ contained a generated signature-like glyph.
32
+
33
+ For setup and current field constraints, use
34
+ <https://pixelkiln.griffen.codes/docs/pixellab>. When working in the PixelKiln
35
+ repository, `docs/PIXELLAB.md` and `docs/ENDPOINTS.md` are the canonical local
36
+ sources. The provider sources are <https://www.pixellab.ai/> and
37
+ <https://api.pixellab.ai/v2/docs>.
@@ -0,0 +1,47 @@
1
+ # Retro Diffusion
2
+
3
+ Read this reference when a manifest selects `retrodiffusion`, when evaluating
4
+ large scene work, or when using native animation and tileset output.
5
+
6
+ ## Operational boundary
7
+
8
+ - Credential: `RD_API_KEY` in `.env.local` beside the manifest or in the
9
+ process environment. Never print or commit it.
10
+ - Status: experimental adapter. RD Fast and RD Plus single-candidate stills are
11
+ live-tested through quote, submit, download, provenance, and recovery.
12
+ Multi-candidate, tileset, GIF, and spritesheet paths remain mock-tested.
13
+ - Cost unit: USD. PixelKiln enforces the offline plan, then checks Retro
14
+ Diffusion's free authoritative quote before submission.
15
+ - Account operations: balance is supported. Listing, adopt, salvage, tagging,
16
+ and deletion are not exposed by the current adapter.
17
+
18
+ ## Where it earns a place
19
+
20
+ - `rd_plus__environment` for one-point-perspective scenic backgrounds.
21
+ - `rd_plus__topdown_map` for 3/4 top-down maps.
22
+ - `rd_tile__scene_object` for 64–384px objects placed on tile maps.
23
+ - `rd_plus__topdown_asset` or `rd_plus__isometric_asset` for isolated assets.
24
+ - `rd_animation__*` and `rd_advanced_animation__*` for GIF or PNG spritesheet
25
+ output.
26
+
27
+ The useful environment styles currently top out at 384×384. PixelLab's `map`
28
+ route reaches 400×400, so Retro Diffusion is not the higher-resolution option
29
+ through PixelKiln today. Choose it for its scene styles, cleaner transparent
30
+ cutouts, smaller palettes, cinematic framing, or native animation. Build truly
31
+ large scenes from separately generated terrain, backdrop, landmark, building,
32
+ and foreground layers, then integer-upscale with nearest-neighbor filtering.
33
+
34
+ The committed 384px benchmark produced substantially larger isometric
35
+ buildings than the earlier 256px brief while retaining 52% to 75%
36
+ transparency and 49 to 55 colors. Its volcanic backgrounds made the pass and
37
+ lava path clear, but dropped a requested fortress and favored close canyon
38
+ framing over separable distant planes. Use a representative large asset before
39
+ assuming prompt details or layerability will survive a batch.
40
+
41
+ For setup, selectors, and option constraints, use
42
+ <https://pixelkiln.griffen.codes/docs/retro-diffusion>. The matched visual
43
+ evidence is at <https://pixelkiln.griffen.codes/docs/provider-benchmark>. When
44
+ working in the PixelKiln repository, the same canonical sources are
45
+ `docs/RETRO_DIFFUSION.md` and `docs/PROVIDER_BENCHMARK.md`. The provider sources
46
+ are <https://www.retrodiffusion.ai/> and
47
+ <https://www.retrodiffusion.ai/app/guide/api>.