pixelkiln 0.20.1 → 0.20.2

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.
@@ -111,9 +111,15 @@ plan → submit → poll → pick (when needed) → fetch
111
111
  └──────── structural/inline outputs ────────┘
112
112
  ```
113
113
 
114
- Remote ids are saved immediately after submission. Generation and download
115
- failures remain separate, so paid work with a temporary CDN failure is
116
- recoverable at zero generation cost. Each stage can be rerun independently;
114
+ Remote ids are saved immediately after submission. Providers that need several
115
+ requests for one asset receive a checkpoint callback. Each accepted remote id
116
+ is written before the next request begins. An incomplete checkpoint remains
117
+ submit-actionable; a complete checkpoint is safe to poll even if the provider
118
+ is interrupted before returning. Checkpoints are reused only when provider,
119
+ generator, and resolved spec hash still match.
120
+
121
+ Generation and download failures remain separate, so paid work with a temporary
122
+ CDN failure is recoverable at zero generation cost. Each stage can be rerun independently;
117
123
  `gen` is only their everyday orchestration. Planning maps current `processing`,
118
124
  `review`, and `selected`/`download-failed` entries to `poll`, `pick`, and
119
125
  `fetch`, respectively.
@@ -200,6 +206,8 @@ uploads manifest-owned PNG/JPEG inputs by content hash, submits an input-bound
200
206
  clone, polls local history, and stores portable `comfyui://` output references
201
207
  so a lockfile does not retain a workstation hostname or input path. It supports
202
208
  `map` candidates and atomic `frames` sets from one still-image output node.
209
+ Each accepted frame prompt is checkpointed in the lockfile, so a retry resumes
210
+ at the first unsubmitted frame instead of queuing the whole set again.
203
211
  Frame-set transport, ordered review/fetch, shared-palette refinement,
204
212
  step/phase verification, approval, and packing have deterministic integration
205
213
  coverage. Live Apple MPS runs cover a small Stable
package/docs/CLI.md CHANGED
@@ -83,13 +83,17 @@ step. It does not run or approve that step on the user's behalf.
83
83
  Queue selected missing/stale generation work without polling it. Enforces the
84
84
  provider spacing and concurrency limits, validates estimates at the spending
85
85
  boundary, and saves each remote id immediately. Revision inputs are rechecked
86
- after any queue wait and before a provider request begins.
86
+ after any queue wait and before a provider request begins. For a provider that
87
+ needs several requests per asset, an unchanged incomplete checkpoint resumes
88
+ without repeating requests the provider already accepted.
87
89
 
88
90
  ### `poll`
89
91
 
90
92
  Advance submitted jobs to completed, failed, or selection-ready states. It can
91
93
  be rerun safely after an interrupted session. When work settles in another
92
94
  stage, the command prints the exact next command instead of ending silently.
95
+ An incomplete multi-request checkpoint stays blocked here; rerun `submit` to
96
+ finish it before polling.
93
97
 
94
98
  ### `pick`
95
99
 
package/docs/COMFYUI.md CHANGED
@@ -219,8 +219,12 @@ The frame count comes from the array, so it cannot disagree with a separate
219
219
  count field.
220
220
 
221
221
  PixelKiln submits one still workflow per value but tracks the result as one
222
- asset. A partial completion remains in progress. The review page shows an
223
- animated loop and ordered strip; accepting any frame accepts the whole set.
222
+ asset. After ComfyUI accepts a prompt, PixelKiln saves its id before submitting
223
+ the next frame. An interrupted retry continues at the first missing frame. A
224
+ changed spec starts a fresh set. Incomplete sets cannot be polled into review,
225
+ and one failed render rejects the complete set while retaining every submitted
226
+ prompt id for diagnosis. The review page shows an animated loop and ordered
227
+ strip; accepting any frame accepts the whole set.
224
228
  Fetch writes `hero-idle-frame-00.png`, `hero-idle-frame-01.png`, and so on.
225
229
  `pack` already turns those role-stable files into a sprite sheet and atlas.
226
230
 
@@ -627,8 +631,8 @@ that GPU time, electricity, hosted hardware, or model licenses are free.
627
631
 
628
632
  When `numImages` is greater than one, `pixelkiln pick` opens the same local
629
633
  candidate review used by hosted providers. A `frames` job always opens an
630
- ordered, animated whole-set review. The lockfile stores the ComfyUI
631
- prompt ID, output node, workflow hash, and selected output. Durable source
634
+ ordered, animated whole-set review. The lockfile stores every accepted ComfyUI
635
+ prompt id, the expected frame count, output node, workflow hash, and selected output. Durable source
632
636
  references use `comfyui://` rather than embedding a workstation hostname.
633
637
  `pixelkiln restore` first uses the validated local content cache, then resolves
634
638
  the portable reference against the current `COMFYUI_BASE_URL`.
package/docs/LIBRARY.md CHANGED
@@ -57,8 +57,8 @@ and optional strength. Paths are excluded from the hash; input bytes are not.
57
57
 
58
58
  `resumeActions` groups current paid-work states into `poll`, `pick`, and
59
59
  `fetch`. It ignores stale specs and entries missing the remote id needed by
60
- their stage, so integrations can offer safe continuation without implying that
61
- a new submission is required.
60
+ their stage. It also excludes incomplete multi-request checkpoints; those
61
+ remain actionable in `buildPlan` and must return through `submit`.
62
62
 
63
63
  For custom orchestration, inspect the dependency gate directly:
64
64
 
@@ -284,6 +284,14 @@ every byte or scalar that can change provider output and must exclude
284
284
  machine-local paths or credentials. Providers that omit the hook fail closed
285
285
  when an asset declares non-empty `providerInputs`.
286
286
 
287
+ `Provider.submit` receives an optional third `SubmitContext` argument. A custom
288
+ provider that needs several remote mutations for one asset should call
289
+ `await context.checkpoint({ jobId, metadata, complete })` after each accepted
290
+ mutation and before starting the next one. PixelKiln persists that checkpoint
291
+ atomically. On an unchanged retry, `previousJobId` and `previousMetadata` let
292
+ the provider continue from the first missing request. Set `complete: true` only
293
+ when the returned job id is safe to poll as the complete asset.
294
+
287
295
  These low-level operations intentionally accept one provider. A mixed-provider
288
296
  caller should partition specs and plan items by `spec.provider`, instantiate
289
297
  each adapter independently, and preserve the provider recorded on a lock entry
package/docs/RECOVERY.md CHANGED
@@ -23,7 +23,8 @@ Use the lock state rather than guessing which stage to rerun:
23
23
 
24
24
  | State | Safe next command |
25
25
  |---|---|
26
- | `pending` or `processing` | `pixelkiln poll` |
26
+ | incomplete submission checkpoint | `pixelkiln submit` |
27
+ | complete `pending` or `processing` submission | `pixelkiln poll` |
27
28
  | `review` | `pixelkiln pick` |
28
29
  | `selected` or `download-failed` | `pixelkiln fetch` |
29
30
  | downloaded output is missing | `pixelkiln restore` |
@@ -36,6 +37,14 @@ still refused; after inspecting it, `pixelkiln fetch --force` explicitly lets
36
37
  the new result take ownership. This also recovers interrupted jobs created by
37
38
  older PixelKiln versions that could not retain the prior output hash.
38
39
 
40
+ ComfyUI frame sets submit one prompt per frame. PixelKiln saves the compound
41
+ job after every accepted prompt, before asking ComfyUI to queue the next one.
42
+ If submission stops halfway through, `plan` reports the saved checkpoint and
43
+ `pixelkiln submit` continues at the first missing frame. `poll` will not advance
44
+ an incomplete set into review. A changed prompt, workflow, input image, seed
45
+ schedule, or other spec identity starts a fresh set instead of appending to old
46
+ prompt ids.
47
+
39
48
  Provider adapters should keep expiring signed result URLs transient and store a
40
49
  provider-neutral reference that can refresh them. Once ingestion succeeds,
41
50
  PixelKiln removes credential-bearing URLs, inline data URLs, and local file URLs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelkiln",
3
- "version": "0.20.1",
3
+ "version": "0.20.2",
4
4
  "description": "Manifest-driven pixel-art generation, review, recovery, and packaging with deterministic provenance.",
5
5
  "type": "module",
6
6
  "sideEffects": false,