• Stefy Lanza (nextime / spora )'s avatar
    video: make character_profiles actually lock identity on every video model · 279096b6
    Stefy Lanza (nextime / spora ) authored
    Loading the IP-Adapter (958d2e09) fixed the mechanism, but only AnimateDiff-class
    pipelines have one. On Wan / CogVideoX / LTX / SVD — the models people actually
    use — character_profiles still did nothing except prepend the profile name to the
    prompt, so identity was not working where it mattered.
    
    The image endpoint does have real IP-Adapter. So when a video model can't
    condition on references itself, render the first frame there against the same
    profiles and run the video as ti2v from that keyframe. This is the recipe
    tools/videogen.py already drives by hand, now done server-side.
    
    It runs BEFORE the video pipeline is loaded, so an image model and a video model
    are never resident at once, and it dispatches through the front (execute_api_request)
    so the image model may live on a different engine.
    
    New request fields: keyframe_identity (auto | always | never), keyframe_model,
    keyframe_steps. 'auto' skips the bridge when the model has native IP-Adapter or a
    first frame was already supplied.
    
    If the keyframe can't be rendered the request still proceeds — identity degrades
    to the prompt hint plus any per-character LoRA and the reason is reported in the
    response warnings — unless the caller asked for 'always', which is an explicit
    requirement and so returns 502 rather than silently producing a stranger.
    
    Verified offline across every branch: bridge fires for Wan and rewrites to ti2v
    with the keyframe; skipped for AnimateDiff; forced by 'always'; disabled by
    'never'; no-op with no profiles or an existing first frame; degrades with a
    warning on image-endpoint failure and raises 502 under 'always'.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01R6iugoNeEgt9PkajKrFyq4
    279096b6
videorequest.py 14.1 KB