From d7d8f7f01dbae778bd70ade63d44a655e8953059 Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Fri, 4 Sep 2026 23:09:43 +0300 Subject: [PATCH] fix: Engine Settings' own copy of h3_block_repeat_last_steps was still floored at 0 The node widget's min went to -50 for the head-window feature, but the Editor's Engine Settings field metadata is a SEPARATE declaration and still had min:0 -- so the UI silently refused negative values the node itself already accepted. Widened to match, updated label/hint for both directions. --- movie_editor/frontend/engine_settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/movie_editor/frontend/engine_settings.js b/movie_editor/frontend/engine_settings.js index f7bba1a5..db6981b5 100644 --- a/movie_editor/frontend/engine_settings.js +++ b/movie_editor/frontend/engine_settings.js @@ -316,9 +316,9 @@ detail: "H3 puts video, text and audio in one sequence, so a plain repeat doubles the block for the audio rows too — the leading suspect for the unprompted dialogue that band 31-40 produces on every run of it. This restores text and audio rows to their single-pass value afterwards. TWO limits, both measured: it does not undo audio's influence on the second pass (attention had already mixed the twice-processed audio into the video rows before they were restored), and it does not keep audio clean DOWNSTREAM — the blocks after the repeated ones still process audio rows while attending to twice-processed video rows, so audio can be contaminated after the fact. It protects the audio at the exit of the repeated blocks, not all the way to the output, which is why enabling it did not save the audio in span-loop tests. Off by default so the measured sweep results stay reproducible — turn it on and compare against the same seed to see whether the trade goes away." }, { name: "h3_block_repeat_times", label: "Extra passes per repeated block", kind: "int", default: 1, min: 1, max: 4, hint: "1 = the block runs twice in total. Higher pushes further from what the following blocks were trained to receive — measured: everything past ~30 collapses at 2 (including blocks that did nothing at 1), while 11-20 survives it on video but not on audio." }, - { name: "h3_block_repeat_last_steps", label: "Only repeat the last N steps", kind: "int", default: 0, min: 0, max: 50, dependsOn: "h3_block_repeat", - hint: "0 = repeat on every step (the original behaviour). Above 0, the repeat only fires on the final N denoise steps.", - detail: "Every sweep result above was run with this at 0 — the repeat firing on EVERY step, including the earliest, near-pure-noise ones where the block is still deciding layout and motion, not detail. That is the likely reason repeat re-rolls the shot instead of sharpening it: doubling a block's say over what the shot even IS, before it exists yet, is a different operation than doubling its say over how a settled shot looks. Confining the repeat to the tail, after structure is already locked in by the earlier steps, is untested and may behave completely differently from every finding on this page — none of it carries over automatically. Counted in STEPS from the end of the schedule, not sigma, so the window lands on the same point of denoising regardless of step count or sampler." }, + { name: "h3_block_repeat_last_steps", label: "Only repeat part of the schedule", kind: "int", default: 0, min: -50, max: 50, dependsOn: "h3_block_repeat", + hint: "0 = repeat on every step (the original behaviour). Positive N = the final N steps only. Negative N = the first |N| steps only, then stop.", + detail: "Every sweep result above was run with this at 0 — the repeat firing on EVERY step, including the earliest, near-pure-noise ones where the block is still deciding layout and motion, not detail. That is the likely reason repeat re-rolls the shot instead of sharpening it: doubling a block's say over what the shot even IS, before it exists yet, is a different operation than doubling its say over how a settled shot looks. A positive value confines the repeat to the tail, after structure is already locked in by the earlier steps. A negative value confines it to the HEAD instead — applying while structure is still forming, then leaving the untouched rest of the schedule to resolve whatever came out, rather than the perturbed step being close to the last word on the output. Neither direction carries over any finding from this page automatically. Counted in STEPS from either end of the schedule, not sigma, so the window lands on the same point of denoising regardless of step count or sampler." }, { name: "bounded_attention_enabled", label: "Bounded attention (experimental, untested)", kind: "bool", default: false, hint: "Stops two people in one frame swapping each other's features, by letting each half of the frame see only its own sentence. Nearly free, and does nothing unless the scene prompt has two sentences describing two subjects. Built but never run — the left/right split is fixed, so it suits two subjects side by side and nothing else." }, { name: "dynashift", label: "DynaShift (steer off bad gens)", kind: "bool", default: false,