Commit Graph
1728 Commits
Author SHA1 Message Date
digital-garbageandClaude Opus 5.5 c072a088ec fix: input steer says when a 1-step schedule leaves it nothing to do
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 21:40:25 +03:00
digital-garbageandClaude Opus 5.5 915ba4a65b fix: input steer never hands a push to another call of the same step; size change is said
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 21:32:03 +03:00
digital-garbageandClaude Opus 5.5 9b53eecddb fix: H3 step wrappers steer the next step's input, never the output step
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 21:27:15 +03:00
digital-garbageandClaude Opus 5.5 c782a63fdb fix: shot memory only ever turns a reused layout down, never up (few-cell frames)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:50:47 +03:00
digital-garbageandClaude Opus 5.5 454edace23 fix: shot memory skips frames too small for a layout (1-cell grid made the noise NaN)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:46:00 +03:00
digital-garbageandClaude Opus 5.5 e87fde3c2d fix: shot memory keeps a normal-strength layout when a shot is reused with its own seed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:37:50 +03:00
digital-garbageandClaude Opus 5.5 8bc7cb643e fix: late-branch guidance no longer leaks the model
Its step wrapper held its own ModelPatcher, a cycle only a full gc frees;
that gc clears ComfyUI's weak link to the parent copy first, leaving it
tracking a dead model ("memory leak with model MiniMaxH3").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:17:32 +03:00
digital-garbageandClaude Opus 5.5 17382c8b63 docs: picture-only features say the sound can still react
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:56:47 +03:00
digital-garbageandClaude Opus 5.5 106163d039 fix: STAS does not count late-branch weak calls; real-ComfyUI clone test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:54:17 +03:00
digital-garbageandClaude Opus 5.5 aaa1c75240 fix: step wrappers find the picture/sound split on a ModelPatcher
_get_latent_shapes only looked under a CFGGuider's conds; wrappers hold a
ModelPatcher, so on packed AV latents every video-only wrapper passed through
unchanged. Also: late-branch and STAS say when they applied nothing, and a
learned value is only rated when the feature actually applied.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:45:08 +03:00
digital-garbageandClaude Opus 5.5 ce2de22b2e feat: STAS for H3; late-branch guidance skips negative-prompt calls
STAS (arXiv 2603.17825) sets massive-activation channels on frame 0 and
frame edges to alpha x peak at one block over the first 40% of steps.
Rating-learned dials now share rated_dial.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:35:29 +03:00
digital-garbageandClaude Opus 5.5 a9c2bd30c3 feat: late-branch guidance for H3, strength learned from ratings
Skip guidance at CFG 1: the weak copy reuses blocks before the branch and
skips the branch block, so only the tail runs twice. Picture only; capture
hooks ignore the weak pass; compiler off while installed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:26:26 +03:00
digital-garbageandClaude Opus 5.5 63bd1f5ed6 feat: editable reference intro for the prompt enhancer; typo fixed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:54:07 +03:00
digital-garbageandClaude Opus 5.5 7f376d8740 feat: coloured logs in terminal and Log panel; hide set_mempolicy noise
The Log panel also captures ComfyUI's logging output, which bypassed the tee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:49:08 +03:00
digital-garbageandClaude Opus 5.5 2f3c9f5c1a feat: shot memory and decisiveness, both learned from ratings
Shot memory reuses a liked gen's coarse starting noise (layout) with fresh
fine noise; reuse-vs-fresh, which shot and how strongly are learned.
Decisiveness is Temporal Score Rescaling (arXiv 2510.01184) on the picture
rows, k learned per key or set by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 15:19:45 +03:00
digital-garbageandClaude Opus 5.5 178e025a64 feat: chat runs show the whole message sent to the enhancer, instructions included
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 19:44:17 +03:00
digital-garbageandClaude Opus 5.5 eeddf46f71 fix: enhancer chat no longer echoes the conversation; it revises its last rewrite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 19:30:57 +03:00
digital-garbageandClaude Opus 5.5 c01db0fb63 feat: enhancer chat says when the reply comes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 19:11:24 +03:00
digital-garbageandClaude Opus 5.5 dfae8915fc feat: enhancer's Last run shows the chat the model was sent
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 19:06:54 +03:00
digital-garbageandClaude Opus 5.5 9436bcfc58 feat: enhancer chat gets its own Composer tab; Reset always shown, greyed when empty
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 18:56:07 +03:00
digital-garbageandClaude Opus 5.5 6ed743a930 feat: chat with the prompt enhancer; it reads its last rewrite and your comments
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 18:48:27 +03:00
digital-garbageandClaude Opus 5.5 1cc60d1f75 fix: shadow negative crashed with 'aimdo memory compile error'
It replaces every block's forward, so the model compiler must be off for that
call, as it already is for block repeat and REINS injection. Never seen before
because until d4d4e29 shadow negative never ran.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:58:00 +03:00
digital-garbageandClaude Opus 5.5 88e4dbceb5 fix: block repeat 'video only' no longer repeats the audio
H3 blocks add their residual into the input in place, so the kept single-pass
tensor was overwritten by the next pass and audio was restored from the
repeated stream. Keep a copy instead (block repeat and span loop).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:43:29 +03:00
digital-garbageandClaude Opus 5.5 d4d4e29ee2 fix: H3 shadow negative never ran; now it does, i2v scenes too
It read the prompt length from transformer_options['c_crossattn'], which
ComfyUI never sets, so every block ran the stock forward. A model wrapper now
records it per call. Per-token mod rows (any pinned frame) no longer disable
it, and the step window reads the real schedule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:41:04 +03:00
digital-garbageandClaude Opus 5.5 94f755bb4b feat: prompt enhancer's rewrite shows in Enhance while the video still renders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:41:11 +03:00
digital-garbageandClaude Opus 5.5 ac8e4eeb1a docs: Think first hint names Qwen3.5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:15:15 +03:00
digital-garbageandClaude Opus 5.5 eadd455cbd feat: Enhance ▸ Last run shows the model's thinking
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:10:07 +03:00
digital-garbageandClaude Opus 5.5 ca3e460e03 fix: Enhance reference finds a shortcut by any meaningful word of its content
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:27:35 +03:00
digital-garbageandClaude Opus 5.5 18d1df960a fix: Enhance reference missed shortcuts holding $variables and matched partial words
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:21:43 +03:00
digital-garbageandClaude Opus 5.5 7313cb2dcf feat: Enhance ▸ Last run shows the reference sent with each prompt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:11:37 +03:00
digital-garbageandClaude Opus 5.5 dbe77d145f feat: Enhance ▸ Reference takes a whole shortcuts file
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:58:28 +03:00
digital-garbageandClaude Opus 5.5 7a7fb79d4a feat: Composer ▸ Enhance ▸ Reference — shortcuts and lorebooks for the enhancer
Name + content appended after the prompt: what it mentions, else the whole source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:54:48 +03:00
digital-garbageandClaude Opus 5.5 1bdce364b4 feat: shot length in seconds under Frames / FPS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:17:30 +03:00
digital-garbageandClaude Opus 5.5 a37ce9caeb fix: Composer variables — own scroll area, one-line rows, filter; add/remove no longer jump to top
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 23:51:06 +03:00
digital-garbageandClaude Opus 5.5 a44074fe52 fix: skip Studio's own prompt enhancement when nothing reads its conditioning
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 23:45:15 +03:00
digital-garbageandClaude Opus 5.5 85e5173c7c feat: linked input "Studio · Enhanced prompt (else prompt + postfix)"
Studio gains an enhanced_prompt output; the link wires to it. Enhancer off or failed sends prompt + postfix unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 23:41:03 +03:00
digital-garbageandClaude Opus 5.5 b48a6a2ead fix: enhancer instructions and image never reached ComfyUI text encoders
ComfyUI tokenizers drop an unknown system_prompt kwarg, and Gemma skips its chat template by default. Instructions now go in the user turn of the model's own template, which also places the image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 23:05:21 +03:00
digital-garbageandClaude Opus 5.5 fa04d6c200 fix: H3 enhancements that crashed, steered the wrong rows, or did nothing
- region lock: layout patch matched the old PackedLayout signature and crashed every H3 run; interior pins now use upstream's native any-frame placement
- REINS/Q-steer/AV decouple/probes: masks cover the target video/audio rows only, not pins, refs or vision pads
- video detail: works with the PDD FinalLayer signature; now in Engine Settings
- Q-steer: steers queries before RoPE, not after (old banks are not reused)
- ALG anchor: blurs the frame-0 pin on H3
- temporal style: hidden on H3
- shadow negative: main-window chip names what it switches off without compose

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 22:51:03 +03:00
digital-garbageandClaude Opus 5.5 0bb682b67c feat: prompt enhancer moves to Composer ▸ Enhance
Own tab with its full sampling settings (temperature, top-p, top-k, min-p,
repetition/presence penalty, seed, greedy) and a last-run before/after view.
Studio's source_image now reaches the enhancer on the per-scene path too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 22:11:42 +03:00
digital-garbageandClaude Sonnet 5 bb59062b3e fix: latent upsampler dropdown silently reverted to auto after picking a file
sel.onchange only passed the filename, missing the "detail_upsampler" key
setSamplerInputNow(name, value) expects -- so it wrote sampler_inputs["<the
filename>"] = undefined instead of sampler_inputs.detail_upsampler, and the
next render recomputed the visible value from the untouched (still unset)
field and fell back to "auto". Matches the working sibling call one line
below (identity_projector).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 19:52:32 +03:00
digital-garbageandClaude Sonnet 5 2ace081737 fix: re-enable output_guidance/trajectory_guidance/score_slider on H3
These were force-disabled for a gate bug, not a measured failure: they
all rode _make_steer_ramp's last-half window, which measured 0-of-4 and
0-of-12 real step coverage on H3's shift-based schedules because it read
sigma as schedule position, which is false there. That gate was already
rewritten to recover the true position from the schedule's own base grid
and is wired into all three call sites -- their correction steps are
also self-normalizing (a fraction of the live tensor/embedding's own
norm, not an LTXAV-tuned constant), and trajectory_guidance's buckets
were built for H3's schedules from the start. Re-enabled to actually
test them now that the thing that broke them is fixed.

embed_guidance/taste_nearest_prompt stay off: different value function,
and phrase emphasis's own manipulation check directly measured
near-invisible pushes from it at H3's calibration -- an actual negative
result, not a stale gate.

Unvalidated on real hardware -- this removes a stale reason for
disabling them, not a claim that any of the three help.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 19:21:38 +03:00
digital-garbageandClaude Sonnet 5 a456a856e6 fix: upload progress was rebuilding the whole media panel per tick
The previous fix (67b1324) put mediaUpload straight into the mediabrowser
zone's fingerprint, so every XHR progress tick did a full rebuild of the
media grid, thumbnails, and project list -- and closed any open <select>
in there (e.g. "Sort by"), the same class of bug just fixed in Engine
settings. Only the file boundary (which file, 1-of-how-many) is in the
fingerprint now; byte-level progress goes through a quiet
updateMediaUploadProgress + a funpack-media-upload-progress event that
mediabrowser.js uses to patch the bar/percent in place, mirroring the
existing updateGenProgress/funpack-gen-progress pattern for the player.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 18:48:47 +03:00
digital-garbageandClaude Sonnet 5 1205c20255 fix: Engine settings dropdown closed itself while open
A <select> was excluded from the field-editing protection that shields
text inputs from autosave/notify-driven rebuilds. Any unrelated store
notify while the dropdown was open (autosave tick, a generation poll,
another zone's change) tore down and rebuilt the pane underneath it,
which closes a native dropdown immediately. Selects are now protected
the same way while focused; their own change event still applies right
away so dependent controls don't wait for blur.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 18:48:38 +03:00
digital-garbageandClaude Sonnet 5 67b1324670 fix: upload progress bar never repainted (missing from mediabrowser fingerprint)
mediaUpload changes on every XHR tick but wasn't part of the mediabrowser
zone's ViewBus fingerprint, so real ticks hashed identically to the last
paint and were skipped -- the bar only ever appeared to update via some
unrelated repaint (e.g. clicking a thumbnail changes mediaPreviewId, which
IS tracked).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 18:27:52 +03:00
digital-garbageandClaude Sonnet 5 ee94e5851c feat: show per-file upload progress in the media bin
Uploads now go through XHR instead of fetch so byte-level progress is
visible; the drop zone shows a bar, percent, and filename instead of
looking stale while the backend receives the file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 18:14:58 +03:00
digital-garbageandClaude Sonnet 5 27a82eead1 feat: server-side media thumbnails, cached, instead of the full original file
The media bin's grid always requested the FULL original file for a
thumbnail (an <img>/video-frame decode of the whole thing, only
cropped down visually via CSS/canvas afterward). A 4K photo or a
multi-MB clip got fully downloaded and decoded just to show a 96px
square, every render.

Added GET /api/media/{mid}/thumb: generates a small JPEG on first
request (Pillow resize for images, one ffmpeg frame-grab for video),
caches it under media/thumbnails/, and serves that instead. Deleting
a media item removes its cached thumbnail too. mediabrowser.js now
loads from this endpoint for both image and video kinds -- the same
canvas-drawing path as before, just fed a file that's already small
instead of the original. Measured live: a 1.57MB test clip's cached
thumbnail is 1.6KB.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 18:05:26 +03:00
digital-garbageandClaude Sonnet 5 b301d40592 fix: Generate no longer waits on a separate autosave, and closes the resulting write race
generate()/generateMontage()/generateSelected() awaited a full project
save (and a separate models save) before doing anything visible --
both are plain network round-trips that can retry for tens of seconds
on a flaky connection (_retryOnTunnel), and nothing set a gen state
until they finished. Clicking Generate on bad internet looked exactly
like the app had frozen: no disabled button, no message, no feedback,
for however long those saves took.

The wait existed because /api/projects/{pid}/generate read the
project BY ID from disk (_project_or_404) -- if the disk copy was
stale, Generate would silently build a graph from old data. Fixed at
the actual source instead of papering over the wait: the endpoint now
also accepts the current project inline in the request body (the same
shape /api/projects/{pid}'s own PUT already takes) and persists
exactly that payload before generating from it, atomically, in one
step. The client sends its live in-memory snapshot instead of relying
on whatever the last autosave wrote. body["project"] stays optional
so any other caller keeps the old disk-read behavior.

Adversarial review (two rounds) found this reopened a narrower race:
the generate handler's own existing tail already saved the project a
SECOND time afterward (to record the queued prompt's hash), so an
ambient autosave landing between this request's two internal writes
would get silently clobbered by the second one. Closed by suspending
the client's ambient autosave (suspendSave/resumeSave, an existing
primitive) for the exact span of the generate request, and by waiting
out any autosave that was already in flight before generate started.
Also moved _markGenInFlight to fire right before the actual request
instead of before that wait, so a scene deleted during a brief
already-in-flight wait isn't ghosted for a request that hadn't
actually been sent yet.

Verified live end-to-end: an edit made only in memory (never
autosaved) reached disk through the generate request itself and
survived a concurrent pending edit through the suspend/resume window,
confirmed via direct reads against the running dev server.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 17:53:49 +03:00
digital-garbageandClaude Sonnet 5 530a45df2e fix: media bin thumbnails now cache a downscaled bitmap, not full-res
Image thumbnails appended the raw <img> (full-resolution decoded
bitmap held in memory for the card's lifetime, just to be shown at
56-96px via CSS crop). Video thumbnails already snapshotted to a
canvas but sized it at the source's native resolution. Neither ever
downscaled anything -- a bin of real photos/4K clips kept every one
of them fully decoded in memory at once.

Both paths now draw down to a capped 320px long edge before caching
(_thumbScale), same visual result, far smaller resident bitmaps. Also
drops the img.draggable=false workaround the old <img>-based image
thumb needed to stop the browser's native image drag from hijacking
card drag-and-drop -- a <canvas> was never draggable to begin with.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 16:52:17 +03:00
digital-garbageandClaude Sonnet 5 14ae90c9be fix: explore_first_step candidate scoring crashed on every real GPU run
_select_best_seed called value_fn.forward()/compress() directly on a
candidate's captured prediction with no device handling -- the value
function loads CPU-only (map_location='cpu'), but the candidate tensor
lives on whatever device the model ran on (cuda in production). Every
candidate failed to score on every real GPU generation since this
feature shipped; _select_best_seed always fell back to the unchanged
seed, silently a no-op the entire time despite passing all tests
(the suite is CPU-only, so a mismatch never had two devices to hit).

Every other value_function.py call site (gradient/ascend/search) moves
its input onto next(self.parameters()).device first -- this was the
one path that skipped that. Mirrored it: compress on the candidate's
own device (cheap reduction), then move the small compressed vector
onto the value function's device before scoring.

Added a regression test using a real second torch device (mps on this
box, cuda in CI/production) to reproduce the exact cross-device
failure, and fixed three pre-existing value_fn test doubles that were
missing parameters() and had silently started hitting this same
crash branch once the fix started calling it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 16:20:18 +03:00
digital-garbageandClaude Sonnet 5 9e3a8278a5 fix: pin the media bin's action row (Clear references etc) while scrolling
Clear references only ever sat above the grid, so clearing refs on a
large bin meant scrolling all the way back to the top first. Made
.media-bin-actions sticky within the bin's scroll container, same
pattern already used for the (currently unused) bin-tabs-sticky class.
z-index bumped to 4 to clear each card's kind badge (z-index 2), which
otherwise ties and wins on DOM order, painting over the sticky bar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 15:50:11 +03:00