1. 09 Jun, 2026 13 commits
    • Stefy Lanza (nextime / spora )'s avatar
      LoRA trainer: in-process Wan video-DiT (QLoRA) training path · 9071e839
      Stefy Lanza (nextime / spora ) authored
      Adds a target="video" path that trains a LoRA directly against the configured
      video model so it loads on the video pipeline (image LoRAs can't apply to a Wan
      DiT). _train_wan: encodes stills as 1-frame latents via the Wan 3D VAE
      (latents_mean/std normalized), encodes the prompt via UMT5, loads the
      transformer expert(s) in 4-bit (QLoRA) with gradient checkpointing, adds PEFT
      LoRA to the attention projections, and trains a rectified-flow loss. Handles
      Wan2.2's dual experts (transformer + transformer_2) via boundary_ratio routing,
      and saves both expert LoRA layers (falls back to high-noise only on older
      diffusers). Reuses the queue, eviction, thermal checkpoints and progress.
      
      LoraTrainRequest gains target/quantize_4bit/num_frames; base-path resolution
      gains a "video" category so it resolves the video model entry.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      9071e839
    • Stefy Lanza (nextime / spora )'s avatar
      Video LoRA: skip adapters incompatible with the video model · 8b30dcc3
      Stefy Lanza (nextime / spora ) authored
      An SD/SDXL image LoRA loaded onto a Wan video transformer matches no keys, so
      set_adapters() raised "not in the list of present adapters: set()" and aborted
      the whole request. Now each adapter is checked against the pipe's PEFT-capable
      components after load; ones that registered nothing (wrong architecture) are
      skipped with a clear message and generation proceeds with whatever is
      compatible (or no LoRA). The request signature is still cached so the futile
      load isn't retried every clip.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      8b30dcc3
    • Stefy Lanza (nextime / spora )'s avatar
      Video LoRA: reuse adapters across clips with the same set · c9c0871b
      Stefy Lanza (nextime / spora ) authored
      The video model stays cached across clips, but LoRAs were loaded from disk
      and fully unloaded on every clip — wasted I/O and fusion latency, since
      consecutive clips of a match request the identical fighter+env LoRAs.
      
      Cache the active LoRA signature on the pipe (_coderai_active_loras) and only
      swap when it changes: a request with the same set reuses the loaded adapters,
      a different set (or none) triggers a clean unload + reload. Replaces the
      apply-then-unload-every-clip path.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      c9c0871b
    • Stefy Lanza (nextime / spora )'s avatar
      Township match render: live progress bars (global + per-clip) · b86bb85b
      Stefy Lanza (nextime / spora ) authored
      Match re-render previously showed only a frozen text status. Now:
      - _stage_videos_render reports per-clip start/end via clip_cb and overall
        done/total via progress_cb.
      - _run_match_job seeds an items list and maps clip state into the job record.
      - The match detail page renders a global progress bar plus one bar per
        clip/output (pending/rendering/done/failed), and these survive a reload
        via /active-jobs + resumeMatchJobs.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      b86bb85b
    • Stefy Lanza (nextime / spora )'s avatar
      LoRA training: admit through the central queue instead of rejecting · 9083cda7
      Stefy Lanza (nextime / spora ) authored
      Route /v1/loras/train through queue_manager.acquire/release with a constant
      "lora-train" model key. Concurrent training requests now queue and run one after
      another (serialized by the scheduler, protecting the shared base cache) and
      participate in the same scheduling/metrics as every other model request, instead
      of being rejected with 409. _train_lock is kept as the in-flight signal that
      _release_base_cache checks.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      9083cda7
    • Stefy Lanza (nextime / spora )'s avatar
      Township UI: regen/train progress survives a page reload · eb655005
      Stefy Lanza (nextime / spora ) authored
      Tag regen/train jobs with kind/name/jtype and add a /active-jobs endpoint listing
      running ones. On Characters/Environments page load, resumeActiveJobs() re-attaches
      the live progress display to any in-flight job for the matching card, so a reload
      (or reopening the tab) keeps showing progress until completion.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      eb655005
    • Stefy Lanza (nextime / spora )'s avatar
      Township UI: click character/environment thumbnails to enlarge · f08cd384
      Stefy Lanza (nextime / spora ) authored
      Add a shared image lightbox (injected into every page via _page) and make the
      reference-image thumbnails on the Characters/Environments pages clickable to view
      them full-size. Click the backdrop or press Escape to close. Delete button still
      works independently.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      f08cd384
    • Stefy Lanza (nextime / spora )'s avatar
      LoRA training base cache + thermal averaging + scoped debug flags; live model config · 8d1136c4
      Stefy Lanza (nextime / spora ) authored
      - LoRA trainer: cache the SD/SDXL base on CPU between jobs so back-to-back
        trainings against the same base skip the disk reload, and the base holds no
        VRAM between jobs (moved to GPU only while training). Fixes the post-training
        eviction failure that forced the next image request into CPU/disk offload.
      - Model manager: add register_external_vram_releaser() + last-resort eviction
        pass so a generation can reclaim the trainer's cached base when needed (skips
        while a job runs).
      - Thermal: average 3 CPU samples spread across a 3s budget for the resume/
        cooldown decision (CPU sensors swing +/-10C); pause stays single-read to react
        fast. Bounded so it never blocks past 3s of the poll interval.
      - Debug flags: --debug-web (uvicorn access lines), --debug-thermal ([thermal]
        [debug] checks), --debug-lora (per-step training loss to terminal); all off by
        default and independent of --debug.
      - Admin: lora_train_base_model field on the Models page; saves apply live to the
        running server (build_runtime_kwargs/apply_model_entry_live) with no restart.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      8d1136c4
    • Stefy Lanza (nextime / spora )'s avatar
      Fix Z-Image image-gen + LoRA training; add separate LoRA training base model · f21de22e
      Stefy Lanza (nextime / spora ) authored
      - images.py: stop reusing cached prompt embeds for Z-Image. Its encode_prompt
        returns per-sample lists the pipeline consumes during a run, so cache-HIT
        reuse corrupted the batch (AssertionError: len(size) == bsz in unpatchify).
        Z-Image now always encodes natively; cache key also bound to id(pipeline).
      - loras.py: fix wrong import (multi_model_manager lives in codai.models.manager,
        not codai.api.state) used for VRAM unload + base-model path resolution; add an
        up-front architecture guard so transformer/DiT models (Z-Image/Flux/SD3) fail
        with a clear message instead of crashing in the CLIP tokenizer.
      - New train_base_model on LoraTrainRequest: train LoRAs against a separate
        UNet-based SD1.x/SDXL model while generation keeps using the DiT image model.
      - gen_township_fighters.py: thread --lora-train-base-model / web field through
        train_lora, _train_profile_loras, stage_loras/stage_env_loras, all run + per-
        card call sites; CONFIG_FIELDS + live default_args apply on /start, /save-config.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      f21de22e
    • Stefy Lanza (nextime / spora )'s avatar
      Township web UI: suppress BrokenPipe/ConnReset from aborted requests · 2c736da4
      Stefy Lanza (nextime / spora ) authored
      Browsers routinely abort media (video seek/scrub) and SSE connections
      mid-response, which surfaced as BrokenPipeError/ConnectionResetError
      tracebacks spamming the terminal. Swallow these in the request handler's
      handle_one_request() and finish() so they're ignored cleanly.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      2c736da4
    • Stefy Lanza (nextime / spora )'s avatar
      Township: per-match outcomes, match previews, editable prompts, terminal logs · df1c0032
      Stefy Lanza (nextime / spora ) authored
      Matches:
      - Outcomes are now per-match (<match>_<fighter>_<outcome>), generated for each
        match's two fighters, so each match's outcome scenes are its own/different.
      - Support multiple matches for the same pair+environment via unique match names
        (numeric suffix); scanner and delete isolate siblings correctly.
      - List view shows a lightweight preview (clip00 keyframe or metadata poster);
        detail view shows clips AND the match's outcomes per fighter, each with an
        editable prompt + re-render + remove. Clip/outcome prompts save to
        prompts.json. Legacy per-fighter outputs still listed.
      
      Prompts page: reframed as master prompts that auto-write a unique prompt per
      clip/outcome of every match; static templates marked fallback-only.
      
      Terminal: per-card action jobs (regenerate, train LoRA, match render) now echo
      their progress to the terminal too.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      df1c0032
    • Stefy Lanza (nextime / spora )'s avatar
      Township: Matches list/detail with edit+remove, global Prompts page, --browser · 5e040759
      Stefy Lanza (nextime / spora ) authored
      Matches page:
      - Lightweight list view (no embedded players); per-match/per-fighter detail
        loads only that item's videos.
      - Edit a match: change fighters, environment, short/long targets, and each
        clip's prompt (saved to prompts.json). Fighter-outputs detail edits outcome
        prompts.
      - Remove videos: per clip, per final, whole match, single output, or all of a
        fighter's outputs (keeps plan/keyframes for re-render). Traversal-guarded.
      
      Global Prompts page (/prompts):
      - Edit the script's global templates — LLM fight/outcome system prompts and the
        static fight-shot + win/ko_win/retire/draw fallback templates. Persisted to
        <out-dir>/prompts_config.json, applied live and re-loaded on every run, with
        reset-to-defaults.
      
      Web UI:
      - Only auto-open a browser when --browser is passed (avoids spawning a terminal
        text browser on headless servers).
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      5e040759
    • Stefy Lanza (nextime / spora )'s avatar
      Township: per-profile LoRA training, Matches page, modals; fix SDXL LoRA dtype · 533bab82
      Stefy Lanza (nextime / spora ) authored
      LoRA training (codai/api/loras.py):
      - Fix instant crash "mat1 and mat2 have the same dtype (Half != float)":
        components loaded in their checkpoint's native dtype (fp16 text encoders +
        fp32 UNet). Force consistent fp32 (stable LoRA reference) for both SD1.5 and
        SDXL, and free VAE/text encoders after pre-encoding to keep memory in budget.
      
      Web UI (tools/gen_township_fighters.py):
      - Per-profile LoRA training launched from the Characters/Environments cards
        (steps/rank, live server progress, status badge); the "Train LoRAs" step now
        trains regardless of the consistency setting and logs what it does. Profiles
        are uploaded to CoderAI first so server-side training has reference images.
      - New Matches page: final short/long videos, single clips, and outcome outputs
        per match. Re-render clips/outputs with the video model (reuses the render
        path, honoring keyframe/LoRA settings) or reassemble finals from existing
        clips (no model).
      - Replace browser alert/confirm/prompt with proper in-page modal dialogs
        (uiConfirm/uiAlert/uiPrompt) on every page.
      - Apply changed connection/model settings (image/video/text model) to the live
        session on Save config / Start, so per-profile jobs use them immediately.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      533bab82
  2. 08 Jun, 2026 2 commits
    • Stefy Lanza (nextime / spora )'s avatar
      Township UI: profile management, regenerate/upload refs, env parity · 278fab3e
      Stefy Lanza (nextime / spora ) authored
      Web UI (tools/gen_township_fighters.py):
      - Characters and Environments management pages: edit every meta field
        (data-driven form, not a fixed set), remove a profile, delete individual
        reference images — synced to CoderAI (DELETE/PATCH).
      - Regenerate references: background job generates N new images guided by the
        kept references (IP-Adapter) and APPENDS them, preserving non-deleted ones.
      - Upload your own reference image files (magic-byte validated, appended).
      - Clear run banner + status-pill label indicating which run/step is executing.
      - Config: -s/--save and -c/--config; web Save button writes server-side and,
        when launched with -c, defaults to that same config path.
      
      Environment parity / consistency:
      - Per-environment identity LoRAs (loras.py: environment field, env image
        resolver, "place" instance prompt; script stage_env_loras, env_loras.json,
        applied to keyframes + video alongside fighter LoRAs).
      - Environment IP-Adapter: environment_profiles on the image request
        (imagerequest.py) resolved into the IP-Adapter reference set (images.py),
        so environment regeneration can match kept references.
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      278fab3e
    • Stefy Lanza (nextime / spora )'s avatar
      Add config save/load to township fighters generator · f5cb44e1
      Stefy Lanza (nextime / spora ) authored
      CLI: -s/--save FILE writes selected generation options to a JSON config
      and exits; -c/--config FILE loads them as defaults (command-line args
      still override, via a two-phase parse).
      
      Web UI: "Save config" button writes the current form options to a file
      on the server (relative paths land in the output dir, absolute paths as-is)
      via a new /save-config endpoint. Web- and CLI-saved configs are
      interchangeable (shared CONFIG_FIELDS / canonical mapping).
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      f5cb44e1
  3. 03 Jun, 2026 1 commit
  4. 11 May, 2026 9 commits
  5. 08 May, 2026 3 commits
  6. 07 May, 2026 10 commits
  7. 06 May, 2026 2 commits