• The modal (previous commit) meant an extra click and a popup just to
    see the clip. Swap it for a native <video controls preload="none">
    directly in the 预览 column — preload="none" keeps the 361-row table
    from firing off thumbnails for every row on load, and clicking the
    player's own play button starts it right there, no dialog involved.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011DUiYs6UjxDMkfvnjtsKFo
    yibo authored
     
    Browse File »
  • Browsing a clip previously meant opening /lib/video/:id in a new tab
    via the raw address link. Add a 预览 button per row that opens a
    native <dialog> with an inline <video> player instead — closes on
    Esc, backdrop click, or its own close button, and clears the src on
    close so playback/buffering stops.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011DUiYs6UjxDMkfvnjtsKFo
    yibo authored
     
    Browse File »
  • live.html and dance.html already have independent scheduling pools
    (architecture.md 2.1), distinguished by clips' channel field, but
    admin.html rendered everything as one flat table with no way to tell
    the two apart or scope edits to one room. Add a 视频直播间/跳舞直播间
    tab switcher that filters the table by channel, lets manual adds pick
    which room they land in, and lets existing rows be reclassified via
    the edit form's new channel select (backed by server.js's existing
    channel support on POST/PATCH /api/admin/library, committed in e96d689
    as part of an unrelated concurrent session's work).
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_011DUiYs6UjxDMkfvnjtsKFo
    yibo authored
     
    Browse File »
  • Fetches characters/garments/dance-refs alongside the library on load
    and joins each clip's characterId/garmentId/refDanceVideoId back to
    their names, so an operator can see "谁的脸 + 谁的衣服 + 哪条参考视频"
    per row (M.7). No composedImageId column — the one-step pipeline
    never produces an intermediate composed image.
    
    Extends the dressup-generate.test.js happy-path test to confirm the
    join resolves real names, not just matching ids.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • POST /api/admin/batch-gen takes {characterId, garmentIds[],
    refDanceVideoIds?[]}, expands to one job per garment (cross-producted
    with refDanceVideoIds when given, else one random active dance-ref per
    garment like the single-generate default), and submits each through
    the same submitGeneration() helper the single POST /api/admin/generate
    route now uses — so the M.7 dedupe cache (existing characterId+
    garmentId combo) is honored per combo, not just per batch.
    GET /api/admin/batch-gen/status?batchId= returns that batch's
    generationJobs records for progress polling.
    
    admin-batch-gen.html: pick one character, multiple garments, and
    optionally pin specific reference dances; submits the batch, polls
    status every 3s into a progress table, and lets failed rows be
    retried individually via POST /api/admin/generate. Linked from the
    other admin pages' nav.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • Table + inline edit + add-form pages matching admin.html's existing
    conventions, wired to the T3-T5 CRUD API and T2's upload endpoints.
    Cross-linked with admin.html and each other in the topbar.
    
    No browser tooling available in this environment to render/click
    through these, so admin-pages-flow.test.js exercises the exact API
    call sequence each page's JS performs (login -> upload a real file ->
    create with the returned URL -> list -> confirm the shape the table
    renders), which is where a field-name mismatch would surface.
    yibo authored
     
    Browse File »
  • Single shared password (.env ADMIN_PASSWORD) + in-memory HttpOnly
    session cookie, no accounts/roles — MVCP M.1/M.10's real account
    system supersedes this in period 3. Covers the existing
    /api/admin/library/* routes (previously unauthenticated, see
    architecture.md 1.2's tech-debt note) plus the new upload endpoint.
    
    admin.html gets a fetch() interceptor that redirects to the new
    admin-login.html on any 401 from /api/admin/*, rather than patching
    every call site.
    yibo authored
     
    Browse File »

  • Static video-gen testing tool (MiniMax native API, then fal.ai) that grew
    into an AI drama live channel backed by an internal H3 Console GPU cluster:
    shared virtual-playhead live playback, prompt submit/match/generate queue,
    admin CRUD for the video library, and bilingual (zh/en) semantic clip names.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »