makepad/libs/ai/models/sing/tools
2026-10-02 19:38:05 +02:00
..
ab_long.sh ai sing: export merges each file's own config section; ac --keep; long A/B arms -- sing_train export took the whole config of the last file read, so a small acoustic model exported with a base vocoder claimed base acoustic sizes and failed to load; each file now gives its own section (ac. from --ac, voc. from --voc). sing_train ac --keep leaves the EMA weights of every save as ac-<step>.ema.mksing. ab_long.sh trains arms a fixed budget without early stop (held-out mel bottoms out at 1-2k steps from scratch, long before the voice is intelligible) and scores each kept checkpoint by held-out word error rate. Checked on node 165: the small arm exports and loads in voice_eval --diag. 2026-10-01 14:21:56 +02:00
ab_round.sh ai sing: an A/B round against memorisation -- speed perturbation, a small acoustic config, held-out songs by name. sing_train ac --augment P plays P of the sung-lyric segments 0.9-1.1x as fast (Aligned::speed: pitch moves by 12·log2 f semitones, length by 1/f, f0 and notes follow); --config small is a ~1/3-size acoustic model (d 192, 3+4 layers, 4-layer refiner); Store::held_out picks the held-out songs by a hash of the shard name (was its index, which moved with whatever else the store held), shared by the trainer and voice_eval --diag. The producer's captions use all 24 major and minor keys. ab_round.sh trains five arms from scratch on one frozen snapshot (base, base+augment, +25% speech, small, small+speech), each to its held-out early stop, and scores each on the held-out songs and the eval lines. Checked: cargo build --release -p makepad-ai-sing --features g2p on node 165; the round is running there. 2026-10-01 13:12:12 +02:00
distill_train.sh ai sing: sung lyrics trained on their score's alignment, with Gaussian dropout and a speech-trained start -- held-out word error rate 96% -> 27% teacher-forced, 97% -> 38% rendered from the score 2026-10-02 19:38:05 +02:00
lyric_rounds.sh ai sing: rounds and lyric words can leave a music model's songs out -- lyric_words.py --exclude MODEL skips song groups that model made (from the producer's request in the inbox), and --count-secs prints the harvested clean seconds of the groups kept. lyric_rounds.sh takes EXCLUDE (counted toward its trigger too) and --now. It also reads the summary rows of sing_eval anchored, because the per-line rows matched too and the first round found no scored checkpoint. Checked on node 165: without ace-step-1.5-xl, 17644 of 27745 harvested s and 4.29 h aligned. Round 2 (no ace-step, 6k steps from A1), its best step 4000 against the current best: eval lines WER 20.0% vs 20.3%, pitch 2.90 vs 2.60 c, so the current best was kept. 2026-10-02 19:38:05 +02:00
lyric_run.sh ai sing: lyric_run.sh starts lyric training from A1, not A2 -- the vowel-only singing fine-tune (A2) lost articulation: on 6 eval lines the speech-trained A1 with the V2 vocoder is understood (WER* 69.5%, e.g. 'I will remember you tonight' word for word) where v0 (A2) is not understood at all. 2026-10-01 10:07:13 +02:00
lyric_words.py ai sing: rounds and lyric words can leave a music model's songs out -- lyric_words.py --exclude MODEL skips song groups that model made (from the producer's request in the inbox), and --count-secs prints the harvested clean seconds of the groups kept. lyric_rounds.sh takes EXCLUDE (counted toward its trigger too) and --now. It also reads the summary rows of sing_eval anchored, because the per-line rows matched too and the first round found no scored checkpoint. Checked on node 165: without ace-step-1.5-xl, 17644 of 27745 harvested s and 4.29 h aligned. Round 2 (no ace-step, 6k steps from A1), its best step 4000 against the current best: eval lines WER 20.0% vs 20.3%, pitch 2.90 vs 2.60 c, so the current best was kept. 2026-10-02 19:38:05 +02:00
producers.sh ai sing: data-proportional training rounds with held-out early stopping, batched producers with takes -- sing_train ac --holdout P --patience N holds out P% of the songs (whole shards, by hash), scores their mel loss at every log step, saves the best weights as <name>-best and ends the round after N logs without improvement. distill_train.sh runs a round when the clean set has grown by half, with steps scaled to the set (no fixed rounds over a tiny set), and resumes the next round from the best held-out weights. song_producer.py makes --takes songs (seeds) per lyric set, in batches of --batch sets, then separates the batch's vocals on the generating node (each model loads once per batch, not per song); every song asks for a solo lead vocal; --model picks the generator (ace-step-1.5-xl for the trial), and 48 kHz output is resampled to the separator's 44.1 kHz. producers.sh runs one producer per node ("gen" or "gen@sep"). Checked: cargo build --release -p makepad-ai-sing --features g2p on node 165; the producers run on .123/.100 (first take in 64 s). 2026-10-01 11:16:39 +02:00
song_producer.py ai sing, ai-hub, tools: the song producer speaks the fleet's known-node TLS and credential proofs; the installer lets the node updater read only the node credential 2026-10-01 13:38:57 +02:00