Intro
Day 16!
Today's experiment: make a theme song for my family's cat â and see if it actually feels like their song, not a generic AI tune.
I used ACE-Step 1.5, a local music-generation AI (think "a Suno you can run at home"). It produced the whole package: lyrics, melody, and a singing voice. Everything here was generated locally on my own machine.
What I used: DGX Spark (my home AI machine) / ACE-Step 1.5 XL (music-generation AI).
Today's experiment
What I wanted to do
One theme song for my cat (Japanese vocals, ~3 minutes). Plus a few background tracks on the side, to measure how fast generation really is.
The approach
- First, the AI interviews me about my cat
- It turns my answers into lyrics (there's a "template" for which answer goes where)
- Hand the lyrics and a style prompt to ACE-Step 1.5 to generate the song
The goal
Not "huh, the AI made something," but a song I'd actually recognize as my cat's.
STEP 1: the AI interviewed me about my cat
Writing the lyrics started with me answering six questions.
| # | Question | My answer |
|---|---|---|
| 1 | What do you call them in the song? | "Our Nekko" (our little cat) |
| 2 | Personality in a word? | Super tsundere, super timid |
| 3 | Favorite gesture or habit? | Getting the base of their tail tapped |
| 4 | One memorable episode? | It takes at least six months to truly bond |
| 5 | How do you feel about them? | Calm â when they're nearby |
| 6 | Any song requests? | Bright and upbeat, female vocal |
"Tsundere" = prickly on the outside, secretly sweet on the inside. A very cat thing.
STEP 2: the template that turns answers into lyrics
Each answer lands in a fixed place in the song.
| Interview answer | Where it goes |
|---|---|
| The name | Chorus (repeated in the catchiest spot) |
| Personality | Verse 1 (introduce the character with everyday scenes) |
| Habit | Verse 2 (sharpen the picture with specifics) |
| Memory | Bridge (the emotional beat late in the song) |
| Feeling | The chorus's tone + the overall mood |
| Song request | Not lyrics â the style prompt |
With that template, my cat's chorus came out like this (Japanese, with a rough English gloss):
Uchi-no-Nekko wa tsun-tsun-tsundere (Our Nekko is tsun-tsun-tsundere)
Kokoro no tobira wa katai kedo (The door to their heart stays shut, but)
Kiiroi hitomi de chiratto ichibetsu (Those yellow eyes shoot one quick glance)
Dere wa kibun de nen ni suukai (The sweet side? A few times a year, if you're lucky)
STEP 3: generate. A 3-minute Japanese-vocal song
Hand ACE-Step 1.5 XL the lyrics and a style prompt (upbeat J-pop, female vocal, Japanese), and out came a full 3-minute song with Japanese singing.
Speed: the audio is 10 seconds, but "composing" takes 8 minutes
The interesting part was the time breakdown.
| What I made | Mode | Time |
|---|---|---|
| BGM (90s, no vocals) Ă4 | quick | 40s total (~10s each) |
| Theme song (3min, vocals) | quick | ~10â15s each |
| Theme song (3min, vocals) | with composition planner | ~8 min (first run ~23 min) |
What's the "composition planner"? = the language model (LM) built into ACE-Step 1.5. It thinks through the song's blueprint (structure, metadata) before rendering audio. Better quality, but the thinking costs time.
Bonus: I made an MV too
How it's built: Whisper transcribes the lyric timings â an image AI (AnythingV5) makes a character and backgrounds â a video AI (LTX-2.3) animates the character â rembg cuts it out and composites it onto the background with subtitles (finer steps in the fold below).
Honestly, the video came out pretty cursed â the lower body suddenly morphs into a tail, the eyes go a little feral â so it's mildly unsettling. That's on the "improve later" list.
Today's takeaways
- The slow part isn't the sound, it's the thinking: the audio itself renders in ~10s; the long wait is the AI planning the song's structure
- Old tools converged: anime-style image (Day 11) + Whisper (Day 14) + video generation (Day 15) came together into a single MV
The details
:::details Environment and models
- Machine: DGX Spark (128GB unified memory)
- ACE-Step 1.5: set up from the official repo with
uv. DGX Spark (ARM64 + CUDA 13) is listed as an officially supported target, and it just ran - Model setup: DiT is
acestep-v15-xl-turbo(4B, 8 steps), planner LM is the 4B version. ~36GB of downloads total - Peak memory during generation ~27GB. Generated via the REST API server (easier to reproduce)
- MV side: ComfyUI (LTX-2.3 22B distilled fp8) + AnythingV5 (character & backgrounds) + rembg 2.0.76 (cutout, anime model isnet-anime) + Whisper large-v3 (timings) + ffmpeg (assembly) :::
:::details Full lyrics and the style prompt
Style prompt (Caption):
upbeat J-pop, energetic and heartwarming, female vocal, bright synth,
acoustic guitar, catchy chorus, 128 bpm, Japanese lyrics
Lyrics are passed with structural tags like [Verse] and [Chorus] (the words are Japanese; the ïŒă«ăăŒïŒ bits are meow ad-libs sung as backing vocals):
[Intro]
ïŒă«ăăŒïŒ
[Verse 1]
çźăćăŁăçŹé ă·ăăŁăšăăŁăœćăïŒă«ăăŁïŒ
ćŒăă§ăæ„ăȘăăźă« æ°ă„ăă°ăă°ă«ăă
ç©éłăČăšă€ă§ ăă±ăăăăă·ă„ïŒă«ăăŒïŒïŒ
ăăăȘăȘăăă« éĄăŻć ă
[Pre-Chorus]
ăăłăšăăŸă㊠ç„ăăă·ă
ăăă§ăăăŁăœăŻ æŁçŽăăźïŒă«ăïŒïŒ
[Chorus - catchy]
ăăĄăźăăăłăŻ ăăłăăłăăłăăŹïŒă«ăă«ăïŒïŒ
ćżăźæăŻ ăăăăă©
é»èČăçłă§ ăĄăăŁăšäžç„
ăăŹăŻæ°ćă§ ćčŽă«æ°ćïŒă«ăăŒïŒ
[Verse 2]
æ«ă§ăăăăźăŻ ć„œăăăăȘăăăă«
ăăŁăœăźä»ăæ čă ăšăăšăć©ăă°
çźă现ă㊠ćă鳎ăăăŠ
ăăŁăšç¶ăăŠăš èŠç·ă§ćœä»€ïŒă«ăăŁïŒ
[Bridge - emotional]
ćżăéăăăŸă§ ććčŽăăăŁă
ăăŁăăăăŁăă çžźăăè·éąăŻ
ăăŸă§ăŻäžçă§ ăăĄă°ăèżă
æ°ă„ăă°éŁă ćźäœçœźă«ăȘăŁă
[Chorus - anthemic]
ăăĄăźăăăłăŻ ăăłăăłăăłăăŹïŒă«ăă«ăïŒïŒ
ăăăȘăȘăšăăă ăæćŹ
ăšăăšăăźăȘășă ă§ ăăŁăœăæșăă
仿„ăæăćź¶ăź çæ§ă§ăïŒă«ăăŒïŒïŒ
[Outro - fade out]
ăăĄăźăăăłïŒă«ăăŒïŒ
ăăĄăźăăăłïŒă«ăăŒ ă«ăăŒïŒ
A tip from the official docs: put the fine-grained style control in the Caption, and keep the lyric tags simple.
:::
:::details How the MV was built (the finer steps)
- Uses the intro through the second chorus (~70s). Per-line timings from Whisper large-v3 (since I already know the lyrics, a mis-hear here and there is fine â I only use the timestamps)
- 20+ cuts. One lyric line = one cut, each assigned a clip whose motion fits the words
- The character image is a single frame: my "anime-fied cat" from Day 11, redrawn into a mascot with an image AI (AnythingV5). That's handed to the video AI (LTX-2.3) to animate. ~30s per clip; motion is described in plain requests ("turn away," "walk cycle," etc.)
- Cutout compositing is frame-by-frame: rembg (isnet-anime) cuts out the character â composite onto a slowly zooming/panning background â draw subtitles â re-encode at 24fps
- Keeping the character's scale fixed within a cut mattered. Matching to the per-frame silhouette makes it shrink the instant it stretches (learned the hard way) :::
:::details Gotchas
- The dash comes last: when I asked LTX-2.3 to "suddenly bolt away," the motion tended to land in the clip's final 0.5s. Worked around it by shifting the segment I use
- Feed the input image in the aspect ratio you want out: at first I fed a portrait (512Ă768) character image into a landscape (768Ă512) generation, and every clip came out as an upper-body zoom that cut off the ears. Rebuilt the input as a landscape full-body image to fix it. Video AIs inherit the input image's composition quite strongly
-
The planner may have been running slower than it should: digging through the logs, the LM's fast-execution component (vLLM) seems to have failed to compile due to a missing
Python.h, so it may have quietly fallen back to a slow path (I didn't fully chase down the cause on Day 16). I hit the same root cause on Day 15 (python3.12-devnot installed) â could be a recurring Spark gotcha :::
:::details License notes
- ACE-Step 1.5: code and weights both MIT. Commercial use OK
- Planner LM (4B, Qwen3-4B based): also MIT
- The generated music is explicitly cleared for commercial use in the official docs (training data is licensed + royalty-free + synthetic)
- MV-side tools (LTX-2.3, AnythingV5, rembg, Whisper) are the ones I already vetted on Days 11â15 :::
Sources
Outro
Lyrics, melody, singing, and a music video â all AI, all on my own machine. See you next time!
Thanks for reading!
![[Day 16] I made a theme song for my cat â lyrics, melody, and singing voice, all AI, all local](https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx75q9dpnxlzbpvh6ff33.png)





![[Day 18] I set up a company of AI agents with Claude Code â and a local LLM (qwen) joined as the caretaker](https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17dl5pzfefc7d1jpmp88.png)
![[Day 17] I analyzed 33,469 of my own AI conversations to audit how I actually use AI](https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphdczdpqa7xkwm43bdpe.png)


