dzmdd's picture
Upload folder using huggingface_hub
e488ce7 verified
|
Raw History Blame Contribute Delete
15.4 kB
# What is alpha here, and how alpha is it
This pack ships finished work and unfinished work in the same install. The
finished work is the Motion Lab de-rope pipeline and the contact sheet; it
has been measured, it has example graphs, and its dials have numbers behind
them in TUNING.md. Everything on this page is the other kind.
Alpha here means one or more of: it has run on one machine and no others,
the interesting half of it is not built, its interface will change, or it
is a real capability that simply has not been tested on enough material to
know where it stops working. Each entry below says which.
Nothing on this page changes existing behaviour or defaults. Alpha nodes
carry `(alpha)` in the name you see in the ComfyUI menu, and the subsystems
load behind a guarded loader, so a broken alpha module cannot take the rest
of the pack down with it.
If you find something wrong, an issue with the symptom and the graph is
worth more than a fix. Symptom-and-dial pairs belong in TUNING.md.
---
## Concept Lab
`concept_lab/`, and the nodes `MAI Concept Capture Arm / Flush` and
`MAI Concept Inject Delta`.
A research subsystem on the bet that a reusable concept does not have to
live in trained weights and can instead live in a measured functional
delta: measure what a piece of conditioning actually does to the model,
factor that into reusable components, compile them back through the model's
own conditioning channels.
**State: the interesting half is not built.** What exists is the data
layer (contracts, workspace, verbs, three surfaces over them) and an H3
capture tap that rides along on a render. What does not exist is anything
that turns a capture into a factor, or a factor into conditioning. Unbuilt
verbs raise and name the task that blocks them rather than returning an
empty result, because in a subsystem whose output is evidence a quiet
nothing is worse than a refusal.
Full status table, the layering rules, and a Contributing section naming
the four things most worth receiving: **`concept_lab/README.md`**. The
design decisions and their reasoning are in `concept_lab/DECISIONS.md`.
## Extension (long clips from short renders)
`h3_extend.py`: `H3 Extension Plan`, `H3 Tail Context`, `H3 Protect Prefix`,
`H3 Prefix Freeze Mask`, `H3 Trim`, `H3 Seam Normalize`; the shared types
in `capsule_types.py`; the graph `examples/motion_pipeline_extend_api.json`;
edge-protection dials on `H3 Jerk Oracle` (`protect_tail`) and
`H3 Window Plan` (`edge_protect`).
Short segments generated and de-roped one at a time, the last 39 frames
carried into the next segment, the overlap trimmed at assembly. Integer
time throughout: the 141/39 atom adds exactly 102 frames and 170 audio
ticks per segment. On a core with per-token masks (#15375) the handle is
WRITTEN INTO the next segment's own pass-1 latent under a time-varying
mask, with the audio handle on an audio-only `MiniMaxH3AddGuide`; on older
cores the whole handle rides the guide. The de-rope holds the prefix at 1
AND freezes it in pass 2; a non-final segment's last 17 frames are also
held at 1, because a gesture that runs into the cut has no "after" to slow
into and comes back fast otherwise. `H3 Seam Normalize` fits per-channel
linear-light gains on the hidden prefix (each VAE round trip darkens it
~2.4%) and applies them to the new material; its audio rms gain measured
NEGATIVE and defaults off.
**State: measured on two content sets, one machine, two segments.** The
masked path beats the image guide everywhere we measured: join jerk 0.86x
to 1.1x the clip's ordinary frame-to-frame motion vs 5x to 6.5x for the
guide, camera velocity continuous through the join instead of reversing,
handle within 2.2 to 3.3/255 of the carried tail, ~20% less wall (no
guide rows in every block). The closing-gesture fix measured 1.55x -> 1.06x.
Unmeasured: more than two segments (the drift curve), the 192/90 atom,
lower inject on continuation segments, dialogue across a join, and the
audio ambience bed, which still steps at the cut (a per-tick audio mask
is the planned fix). The API graph is the only form shipped so far.
## The timeline surface
Nodes: `H3 Drawn Plan`, `H3 Plan Settings`, `H3 Plan Estimate`,
`H3 Timeline Analyze`, `H3 Timeline Render`, `H3 Flight Recorder Start` and
`Stop`.
A plan document as the single source of truth: something proposes a plan,
a human edits it, a compiler turns it into a legal graph. The node surface
reaches parity with the compiler route, and the splice is proven on tensors.
**State: real but young.** The interface is expected to move, and the
editing experience around it is not built. If you are looking for the
production route, use the ordinary de-rope graphs.
## The audio init for dialogue
`H3 Audio Smear`, plus `audio_latent` / `audio_mode` on `H3 V2V Init` and
`audio_source` on `H3 Audio Recover`.
Fixes a real defect: a de-rope breaks speech, because the picture gets an
init and obeys it while the audio starts from zeros, so pass 2 writes a
fresh performance at natural rate and moves the mouth to that. Seeding the
audio rows with the baseline performance stretched onto the same dilated
clock makes pass 2 render a genuinely slowed take. The README's
"Dialogue through a de-rope" section has the adoption steps.
**State: it works, on material we have not varied enough.** The geometry
is solid: the smear/recover round trip is sample-exact in both directions
with envelope correlation 0.975, and the init costs nothing measurable in
picture quality. But it has been heard on a handful of clips, all
two-speaker sword-fight material at hold factors around 4 and dilations
between 2.4x and 2.7x. A single speaker, speech over music, non-anime
footage, and other hold factors are all unmeasured. If you try one of
those, that result is worth reporting whichever way it goes.
## The motion adapter (pilot)
A rank-16 LoRA trained on the de-rope task itself, applied to the de-rope
pass only. Documented with its measured settings and its known costs in the
README's "The motion adapter (pilot)" section, and released as an
intermediate option rather than a finished one. A more ambitious all-in-one
adapter is in progress and may not work.
## Manual mask paths
The `(alpha)`-tagged inputs on `H3 V2V Init` and `H3 Motion Composite`:
manual region masks, final-alpha masks, and the time-varying mask path.
These are exercised by the checklist in **`TESTING_ALPHA.md`**, which
covers the 2026-08-09 node batch and still wants human passes on the
interactive widget and the drag-in workflows.
---
## VRAM Lab
`H3 Streamed Blocks`, `H3 Memory Probe`, `H3 Free Cache`, `H3 Evict Text
Encoder` (`vram_lab.py`, 2026-08-18). Alpha because it has run on one
machine (RTX PRO 6000 Blackwell, 188 SMs) and its exactness is a kernel
property, not a code property: query chunking is bit-equal only while every
chunk keeps PyTorch's flash kernel off its split-KV path (measured boundary
`heads x ceil(L/64) >= 0.8 x 2 x SMs`; the node sizes chunks from the SM
count with a 2.6x margin and carries a `self_check` that compares stock and
streamed on the first block's real input). int8 and W4A8 checkpoints are
bit-equal by mechanism (row-wise activation scales, int32 accumulate);
NVFP4/FP8 would need one shared activation scale and are untested; bf16 is
numerically equivalent, not identical. `kv_block` is experimental and as
built does not lower memory (leave it at 0). The output head has an exact
mode (default) and a chunked-GEMM mode that changes the clip after 25 steps
by ~1e-6 per step of fp32 difference; that mode is labelled and off.
What was measured, one graph (294 f -> 702 f de-rope at 1376x768, ~217k
tokens): torch activations peak +11.9 GiB over the weight floor at any
card; a 16 GB card in a 32 GB machine renders it with ComfyUI's dynamic VRAM
and `--fast-disk` at 316 s/step; a 96 GB card resident is 311 s/step. RAM is
the small-machine ceiling in normal mode (CPU copies of the models without
`--fast-disk`, and CPU-side IMAGE intermediates); the text encoder costs
1 to 2.5 GiB of peak on a 16 GB card and about 3 s per new prompt, and
either eviction or the conditioning bank removes it. Untested: other GPUs,
Windows, ROCm, non-flash attention backends (cuDNN and mem-efficient are
chunk-invariant at every length here but 1.1 to 2x slower; no two backends
are bit-equal to each other).
The `kv_store` options (`kvi8r`, `kvi8s`) are the approximation tier of the
same node: half the K/V bytes (kvi8r measured +9.5 GiB forward peak against
the exact +11.9 at 217k tokens; kvi8s attends on int8/fp8 tensor cores
straight from the store, ~1.6x faster attention standalone), same-seed
renders are sibling takes, and only kvi8r's first cut has been in front of
eyes ("almost perfect" on the de-rope side by side, one clip, one viewer).
The node defaults to the exact store; the low-VRAM example graph turns kvi8r
on (operator's call for that graph); the table with the numbers and what is
still owed is in LOWVRAM.md. The int8_convrot video VAE now in the example graph is also an
approximation (60 dB PSNR against the fp16 decoder on the same latent).
## Time burst (examples/experimental/time_burst_api.json)
Alpha because: one clip, one seed, one machine, and the effect is a defect
worn as a feature. The windowed insert with noise-born in-betweens and no
guide has no clock inside the window, so it rushes the span (about 2.7x the
source speed on the shipped clip) and invents flares. The graph is the exact
one that made `assets/time_burst_result.mp4` from `assets/time_burst_plate.mp4`,
so the first run is a reproduction, not an experiment. What is not built:
any control over how hard it rushes beyond the hold map and inject; a
second clip; a null pair. If you want the ordinary insert, start from the
motion pipeline graphs instead.
## Where to look next
| | |
|---|---|
| `concept_lab/README.md` | Concept Lab status, layering, contributing |
| `TESTING_ALPHA.md` | hands-on checklist for the manual mask and editor batch |
| `TUNING.md` | dials with measured numbers, for the finished pipeline |
| `ROADMAP.md` | where the unfinished parts are meant to go |
---
## Repair verb
`h3_repair.py`, nodes `H3 Repair Plan (alpha)` and `H3 Repair Splice (alpha)`.
Type a bad frame range; the plan snaps it outward to whole tokens, runs the
regeneration through the nearest shot cut, and the splice puts every
untouched pixel back bit-exact, printing its seam numbers. Validated on one
cell and one in-graph rerun (entry seam 0.26x the clip's median frame delta,
exit ON the source's own cut within 1.8%). Alpha because: one scene family
so far, and AUDIO IS STILL A WORK IN PROGRESS: the splice passes audio
through untouched, which is only right when the repair changed no performance.
## DyRoPE
`motion.py`, node `H3 DyRoPE (alpha)`.
An instrument that hands the de-rope's two clock geometries (true world time
vs the trained grid) to different transformer blocks or different denoise
steps. The dose map is measured and in TUNING.md: two settings keep the
world-time correction, everything below them loses it, everything above adds
shimmer. Alpha because: one scene measured deeply, everything else untested.
## Audio prefix freeze
`motion.py`, inputs `audio_prefix_ticks` and `audio_prefix_release_ticks` on
`H3 V2V Init`.
The audio twin of the video prefix freeze, with a half-cosine release.
Bench-tested on chained music (overlap correlation ~0.92 in the full
chain, 0.98 on the pass-1-only control; beat phase 0.0 ms). It carries local continuity (level, timbre, beat),
not a track's global phrase structure. Alpha because: the caveat list in the
README section is load-bearing; read it before wiring.
## Drift Control
`h3_drift.py`, node `H3 Drift Control (alpha)`.
Schedule-matched noise on a carried video prefix so a chain's later joins
stop drifting. Second-join delta 0.680 to 0.860 with the first join
unchanged; replicated across two chains and new seeds; joins hold 0.85-0.89 through link 4 (the earlier chain sat in the 0.65 class at its second
join before the recipe; cross-chain comparison, not a paired arm). Refuses to stack with
any other dynamic denoise-mask patch; sigma-split samplers unsupported.
## Color Carry
`h3_color_carry.py`, nodes `H3 Delta Color Carry (alpha)` and
`H3 Scene Color Stats (alpha)`.
Cancels the VAE round-trip color bias on a carried prefix by adding only
E(corrected) minus E(original) to the latent, so the encode bias cancels and
the weak scene-one grade survives. Active path exercised on a real 4-link render 2026-08-24: it fires, corrects in the anchor direction, and stays sub-visible under its clamps on mildly-drifted content; on the deepest tested link it fires on both channels at or near its clamp. A strong-drift bench is still owed.
## Video Compare viewer (upgraded player)
`video_compare.py` + `web/video_compare.js`. The review player grew a
timeline, loop brackets, waveform, blips and a frame-exact export this
release. KNOWN ISSUES, alpha honesty: multi-video playback inside the
ComfyUI node surface does not hold sync reliably (browser video elements
each run their own clock; every correction strategy trades stutter for
offset), and the transport can wedge after scrubbing during playback -
re-queue or reload the page to recover. The standalone deck pages built
by `tools/compare_deck/` do not share these problems. Two more, both about
audio: in clock sync mode audio follows only the clock-owning side, so
locking audio to the other pane is silent until sync mode is flipped; and
the realtime export records audio from the locked side even when it is not
one of the two playing panes, so prefer the precise export. Planned fix,
next iteration: the node bakes each pair into ONE combined preview stream
and every view mode becomes a crop of it - one decoder, one clock, sync by
construction. Deferred with it: the player is duplicated (~330 lines)
between `web/video_compare.js` and the deck template, and a single-source
refactor is the next iteration's job (the deck's export bitrate selector
having been honored on only one of the two export paths was the first bite
of that divergence).
## Mid-denoise insert
`motion.py`, node `H3 MidInsert (alpha)`.
Inserts time-dilation tokens into a still-noisy latent at a handoff sigma
instead of between passes, with a measured variance top-up. Kept for
research honesty: at its one tested operating point (handoff sigma 0.53,
four dense steps) it breaks clip continuity in playback, and it is
documented as that negative rather than removed. Do not reach for it in
production; the two-pass insertion path is the shipped construction.
## VRAM lab instruments
`vram_lab.py`, node `H3 FakeQuant (alpha)`. `H3 Sol Attention` is in the
code but NOT registered this release.
Measurement instruments from the quantization review work: FakeQuant
fake-quantizes a chosen region of the model's activations so a precision
regime can be auditioned without real kernels; Sol Attention switches the
attention path for the same kind of audition. Instruments, not
accelerators: they exist to make honest comparison pages, and their
numbers only mean something next to a reference arm. FakeQuant ships;
Sol Attention stays unregistered until it gets the DyRoPE arm/disarm
pattern, because it rebinds attention process-globally with no restore
path.