Skip to content

feat(chat): /album on c0mpute.com/chat — band, songs, lyrics, cover, zip - #270

Merged
ralyodio merged 1 commit into
masterfrom
feat/chat-album
Nov 10, 2026
Merged

ralyodio merged 1 commit into
masterfrom
feat/chat-album

Conversation

@ralyodio

Copy link
Copy Markdown
Collaborator

/album <idea> (also /lp) in c0mpute.com/chat. Infernet (InfernetProtocol/infernet-protocol#184, merged) does the work:

  • names an original band, an album title and 8 songs (or the count the idea asks for, 2-12)
  • writes every song's lyrics with the album's context
  • draws one album cover
  • renders each track on c0mpute workers (ACE-Step 1.5), 3 at a time

The chat shows the cover, band, album, concept and a live track list (per-track node progress). Each finished track plays and downloads from /api/v1/music/<track id>. When the album is done, one zip downloads: Band - Album/ with cover.jpg, album.txt, NN - Title.mp3 (ID3 tags: title, artist, album, track n/N, lyrics, embedded cover) and NN - Title-lyrics.txt.

Proxies: POST /api/v1/album, GET /api/v1/album/<id>, /cover, /zip (streamed through).
lib/chat/album.ts: command parsing, request validation, a sanitizer for Infernet's poll body (track ids must be UUIDs, unknown fields dropped), progress text and track file names, with album.test.ts (4 tests, passing).
Billing: stays on Infernet; each track costs one /music song.

tsc --noEmit is clean. Note: music.test.ts already had one failing expectation on master (the "queued" wording changed in music.ts); this PR doesn't touch it.

🤖 Generated with Claude Code

`/album <idea>` (also /lp) asks Infernet's /api/chat/album to name a
band, an album and 8 songs (or the count the idea asks for, 2-12),
write their lyrics, draw a cover and render every track on c0mpute
workers. The chat shows the cover, band, album, concept and a live
track list; each finished track plays and downloads from
/api/v1/music/<track id>, and the finished album downloads as one zip
("Band - Album/": cover.jpg, album.txt, NN - Title.mp3 tagged with
lyrics + cover, NN - Title-lyrics.txt).

- proxies: POST /api/v1/album, GET /api/v1/album/<id>, /cover, /zip
- lib/chat/album.ts: command parsing, request validation, a sanitizer
  for Infernet's poll body, progress text, track file names (+ tests)
- billing stays on Infernet: each track costs one /music song

Needs InfernetProtocol/infernet-protocol#184 live.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

13 finding(s)

HIGH/CRITICAL: 1 | MEDIUM: 8 | LOW: 4

Severity Rule Location
HIGH js-ssrf-outbound-request apps/web/public/sw.js:24
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:53
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:89
MEDIUM sh-remote-script-execution scripts/dev-setup.sh:25
MEDIUM sh-eval-expansion scripts/dev-setup.sh:35
MEDIUM sh-remote-script-execution scripts/install.sh:181
MEDIUM sh-remote-script-execution scripts/install.sh:206
MEDIUM sh-remote-script-execution scripts/install.sh:404
MEDIUM sh-remote-script-execution scripts/install.sh:446
LOW py-ssrf-outbound-request examples/business-strategist-agent/chat.py:37
LOW py-ssrf-outbound-request examples/business-strategist-agent/train.py:54
LOW secret-generic-credential node/crates/c0mpute-core/src/webhook.rs:1171
LOW py-path-traversal node/crates/c0mpute-core/tests/fixtures/fake-infernet-text:29

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 0d74fd7 into master Nov 10, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant