• Stefy Lanza (nextime / spora )'s avatar
    video: a model says how long its clips can be (v0.3.4) · 0dc6084e
    Stefy Lanza (nextime / spora ) authored
    Township's clip lengths were tuned when the only video model could hold ~81
    frames in one call, so a 70-second match became a dozen short cuts. LongCat was
    pretrained on continuation and the server renders a long shot in segments, so
    the same match wants a handful of long takes — and the frame numbers that suit
    one are wrong for the other by a factor of four. Only the two starter templates
    knew that, and only because someone typed it in.
    
    Worse, nothing snapped a picked count onto what the model can emit:
    random.randint handed the server lengths like 250, which is not 4n+1 for any
    VAE and not on LongCat's 93+80k segment grid, so the server rounded and the
    plan's own numbers became fiction. On LongCat that also silently costs
    block-sparse attention, because every point of 93+80k is a 16n+13 count BSA
    can tile and nothing between them is.
    
    Server — codai/models/video_geometry.py is the geometry once: native rate, the
    legal frame grid, how much ONE render holds, whether continuation is native,
    and the side multiple below which the fast attention path is lost. Published
    per model on /v1/models (ModelInfo.video) and used by the render path itself,
    so what the server advertises and what it rounds to cannot drift. The numbers
    were spread across three modules that could not tell a client; the literals
    here are pinned to each source by tests, since the LongCat and H3 workers run
    in 3.10 venvs this cannot import. models.json overrides every field.
    
    Township — the five frame fields now default to 0 = AUTO: derive the budget
    from the model's geometry and this tool's seconds band, then snap both ends and
    every pick onto the model's grid. Seconds, not frames, because clip count falls
    out of long_target / (frames/fps). An explicit number still wins, so a saved
    config keeps exactly the budget it had. Entrances and the face-off get their own
    shorter band instead of borrowing the fight budget (on LongCat that made every
    entrance an 11-22s take). Outcome shares are snapped per shot and the total
    rewritten, the per-render chunk comes from the model (Wan keeps its
    conservative 50), and the chaining decision reads the published continuation
    rather than matching the model's name.
    
    At the defaults a 70s match goes from 9-11 Wan cuts to 4-6 LongCat takes, each
    one request with native continuation, with BSA still on.
    
    1607 tests pass; the 17 failures and the test_broker_protocol hang are
    pre-existing and unrelated (verified with the diff stashed).
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    0dc6084e
textrequest.py 8.25 KB