05.1 · Asset file service on trogdor: intermediates, preview, cross-game library #14
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
cmoriarty/trog#14
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Planning ticket (from agentic-game-dev experience, raised 2026-07-23 during 05 implementation): assets generated on trogdor need sharing / transferring / serving / searching / preview beyond what git-is-truth provides.
Already covered — do not rebuild: shipped per-game assets are committed to the game's Forgejo repo. Forgejo provides raw-URL serving, browse/preview, per-repo search, clone/pull transfer. That stays the source of truth.
Actual gaps:
find_similar_assetsfrom the agentic-game-dev audit — separate ticket when a consumer exists).Proposed shape: one lightweight file service on trogdor over
/mnt/output(already exists), its own Portainer stack (multiple consumers — trog, agentic-game-dev, humans — so infra, not trog compose, per the common-mcps boundary rule). Conductor's comfy_item.py gains one step: land intermediates in/mnt/output/<game>/<day>/before committing winners to the repo.Candidates (open source, single container):
Decide when picking up: auth model (LAN-open vs accounts), retention policy for intermediates, whether the studio (tickets 07–09) reads previews from here or only from Forgejo, and whether WebDAV mount replaces ad-hoc scp.
Non-goals: replacing git as asset truth; S3/MinIO-grade object storage (overkill until something needs presigned URLs).
generate_assetsMCP tool, model-swap conductor #4First concrete customer landed (2026-07-24): every drain now commits an interactive
assets/review.htmlinto the game repo (scripts/asset-review.py, conductor hook) — animated sprite sheets via CSS steps(), audio players, pixel-true upscales, spec briefs as context.But Forgejo raw serves HTML as
text/plainby design (XSS protection), so the committed page is not browsable from Forgejo itself — clicking raw shows source. Verified locally: the page renders perfectly when served with a real content-type.This makes the file service the delivery mechanism for asset reviews, which sharpens this ticket's requirements: serve game-repo checkouts (or mirror
assets/trees) with correct mime types, sohttp://<host>/<game>/review.htmljust works. copyparty does this out of the box.generate_assetsMCP tool, model-swap conductor #4Implemented and live-validated
Stack: trogdor-files (copyparty/ac, Portainer git stack 95, LAN-only anonymous,
http://trogdor:3923). Shares:/games(repo mirrors),/intermediates(14-day auto-expire),/drop(uploads),/output(legacy tree, agentic-game-dev outputs browsable again),/models(RAID, read-only).Producers wired (trog side):
Live validation (fresh bench drain, 8/8):
http://trogdor:3923/games/asset-bench/assets/review.htmlserves as realtext/htmland renders — the original Forgejo text/plain gap is closed; review pages are now permanent bookmarkable URLsknight-walk-142538.mp4(318KB raw motion clip) landed in/intermediates/asset-bench/Integrations beyond the original scope, no extra work needed:
http://trogdor:3923/games/<game>/index.htmlDeliberately not done: cross-game similarity search (pgvector embeddings — needs a consumer first, noted in the original ticket) and any auth (LAN-only by design; revisit if this ever faces a network with strangers).
Closing — the file service is infrastructure now
Shipped as its own repo + git stack (trogdor-files, stack 95, copyparty at
http://trogdor:3923), wired into the conductor (post-drain repo mirrors + raw-clip intermediates), live-validated end to end on a bench drain: review pages render with real mime types, intermediates land and auto-expire, the RAID browses.What this ticket turned out to really be: the delivery layer for everything the pipeline produces — review pages today; playtest's served-game target (#6) and the "URL you send to friends" (#11) tomorrow, both riding the exact same
/games/<game>/mirror with zero additional work. The intermediates share is #15's evidence locker, already filling.Standing state: deployed image verified current, CI green, bench artifacts cleaned (bench recreates with
make asset-benchany time), topology documented in the README's deploy-from-scratch section.Deferred with triggers: pgvector similarity search (needs a consumer), auth (needs a network with strangers).