LAION-AI/Voice-Acting-Pipeline

Self-contained DramaBox voice acting pipeline: VoiceNet taxonomy, multi-GPU prompt generation, TTS synthesis, and audio refinement

4

stars

36

commits

Python

primary language

Jul 29, 2026

updated

README

Voice Acting Pipeline

By Christoph Schuhmann

Open-weights voice acting data pipeline combining structured taxonomy sampling, DramaBox TTS synthesis, Sidon speech restoration, and ChatterboxVC augmentation with best-of-N ranking across 46 scoring methods.

Live Demo: Sidon+VC Sample Groups β€” 20 groups x 25 candidates with LLM-guided CUT TO: splitting, Whisper turbo ASR, and Gemma 4 re-annotation.

Benchmarks (landing page):

Dataset Plan: See the full technical white paper β€” Towards an Emotionally Expressive Audio Omni-Model β€” for the complete LAION Voice and LAION Voice Acting dataset construction plan, model inventory, and annotation strategy.


DramaBox Voice Acting Data Pipeline

End-to-end voice prompt generation and audio synthesis using the DramaBox TTS model (22B DiT transformer) and structured voice taxonomy sampling. Based on the voice taxonomy research from Schuhmann et al., 2025 and EmoNet-Voice (Schuhmann et al., 2025).

This pipeline generates richly annotated voice performance prompts in the DramaBox format β€” single-speaker scenes with stage directions (English) and spoken dialogue (target language) β€” then synthesizes them into audio. Each prompt is procedurally constructed by sampling from structured taxonomies, then expanded by an LLM (Gemma 4 E4B-it) into a full performance script.

Current Pipeline: DramaBox + Sidon + ChatterboxVC

The full audio processing chain:

Taxonomy Sampling          LLM Prompt Gen         DramaBox TTS (22B)
(VoiceNet/Archetype/       (Gemma 4 E4B-it)       CFG=2.5, STG=1.5
 Situation/ActingChall)                            25 candidates/prompt
        |                        |                        |
        +------------------------+                        |
                                                          v
                                              +---------------------------+
                                              |  Per-Sample Augment       |
                                              |                           |
                                              |  Path A: Sidon only       |
                                              |    (16kHz -> 48kHz)       |
                                              |  Path B: ChatterboxVC     |
                                              |    + Sidon (VC -> restore)|
                                              |                           |
                                              |  Pick best by             |
                                              |  DNS-MOS OVR score        |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Whisper Turbo ASR        |
                                              |  (word-level timestamps)  |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  LLM-Guided CUT TO:      |
                                              |  Split (Gemma 4 E4B-it)  |
                                              |  + quiet-spot detection   |
                                              |  + LLM fade strategy     |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Best-of-25 Ranking       |
                                              |  (WER, VoiceCLAP,         |
                                              |   EmoNet, Content)        |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Gemma 4 Re-annotation    |
                                              |  (ASR -> refined prompt)  |
                                              +---------------------------+

Augmentation Sub-Pipeline

For each raw TTS candidate, two enhancement paths run and the best is selected:

Raw TTS Audio ──┬──► Sidon Speech Restoration ──► DNS-MOS ──┐
(from DramaBox)  β”‚    (w2v-BERT LoRA + DAC)                   β”œβ”€β”€β–Ί Pick higher OVR
                 β”‚    (16kHz β†’ 48kHz)                         β”‚
                 └──► ChatterboxVC ──► Sidon ──► DNS-MOS β”€β”€β”€β”€β”˜
                      (S3Gen flow-matching VC,
                       self-VC or ref-VC)

Two-Part CUT TO: Pipeline

For two-scene audio, a self-VC of the full audio provides the VC target for speaker consistency:

Full Audio ──► Self-VC ──► Sidon ──► full_enhanced (VC target)
                                           β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
Part 1 ──┬──► Sidon only ──► DNS-MOS ──┐
         β”‚                              β”œβ”€β”€β–Ί Pick best
         └──► VC(β†’full_enhanced) + Sidon ──► DNS-MOS β”€β”€β”˜

Part 2 ──┬──► Sidon only ──► DNS-MOS ──┐
         β”‚                              β”œβ”€β”€β–Ί Pick best
         └──► VC(β†’full_enhanced) + Sidon ──► DNS-MOS β”€β”€β”˜

Scoring methods (46 total):

  • 6 quality/CLAP methods β€” combine WER, VoiceCLAP similarity (Large + Small), content enjoyment, with (1-WER) multiplicative factor
  • 40 EmoNet emotion methods β€” one per emotion dimension (Empathic Insight Plus), with WER < 10% hard cutoff

Demo Grids

Sidon + ChatterboxVC Pipeline (Current)

Listen to the latest Sidon+VC experiment β€” 20 groups x 25 candidates = 500 audio clips with LLM-guided CUT TO: splitting and Gemma 4 re-annotation.

DemoDescriptionLink
Sidon+VC Sample Groups20 groups, best-of-25, LLM-guided splitssidon_vc_sample_groups.html

ACCC LavaSR Experiment (Legacy)

50 groups x 25 candidates = 1,250 audio clips across 10 pages. Each page has an interactive ranking dropdown with 46 methods.

PageGroupsLink
Page 1Groups 0-4accc_lavasr_p1.html
Page 2Groups 5-9accc_lavasr_p2.html
Page 3Groups 10-14accc_lavasr_p3.html
Page 4Groups 15-19accc_lavasr_p4.html
Page 5Groups 20-24accc_lavasr_p5.html
Page 6Groups 25-29accc_lavasr_p6.html
Page 7Groups 30-34accc_lavasr_p7.html
Page 8Groups 35-39accc_lavasr_p8.html
Page 9Groups 40-44accc_lavasr_p9.html
Page 10Groups 45-49accc_lavasr_p10.html

Also available:


All Paths at a Glance

The pipeline supports 12 generation paths organized into three families. Each path uses a different sampling strategy to produce diverse voice acting data.

Standalone Paths (Single Scene)

PathSamplingDescriptionDetails
A (VoiceNet)57 VoiceNet dims + EmoNet + Vocal BurstsFull taxonomy sampling: 3 mandatory dims (Tempo, Gender, Age) + 5 random, 1-3 emotions, flow style, mandatory wordsPath A Details
B (Archetype)920 archetypes x 92 genresGenre/character archetype-based: random archetype + emotions + Tempo/ArousalPath B Details
C (Archetype Named)Same as B + explicit namingArchetype with explicit role naming in the DramaBox script (e.g. "a battle-hardened noble knight")Path C Details
D (Reference Audio)Timbre whisper + VoiceNet + Chatterbox VCReference audio pipeline: timbre caption guides prompt, DramaBox TTS + voice conversion to match reference speakerPath D Details
AC (Acting Challenge)19,247 acting challenges + VoiceNet gender/ageAudition-style method acting from challenge scenarios β€” naturalistic, genuine, dynamic emotional arcAC Details
SIT (Situation)289 situations x EmoNet emotionsSituation-driven acting: actor is physically/socially IN a specific situation from the Situation Taxonomy (body posture, activity, social context, environment, health, climate, fatigue, pain) with sampled emotionsSIT Details

Character Consistent Paths (Two Scenes β€” "CUT TO:")

All CC paths generate two scenes with the same speaker in contrasting emotional states, separated by a "CUT TO:" marker. The speaker's fundamental voice (age, gender, timbre) stays identical β€” only the emotional delivery changes. Audio is split into Scene 1 / Scene 2 using LLM-guided splitting (Gemma 4 E4B-it + Whisper turbo word-level timestamps + quiet-spot detection).

PathSamplingKey ImprovementDetails
CC-A (VoiceNet)VoiceNet + contrasting emotionsOriginal two-scene formatCC Details
CC-B (Archetype)Archetype + contrasting emotionsOriginal two-scene formatCC Details
CC-C (Archetype Named)Archetype named + contrasting emotionsOriginal two-scene formatCC Details
CC2-A (VoiceNet v2)VoiceNet + contrasting emotionsEnhanced: explicit emotional scene setup + dramatic transition descriptionsCC2 Details
CC2-B (Archetype v2)Archetype + contrasting emotionsEnhanced: genuine/spontaneous/authentic delivery emphasisCC2 Details
CC2-C (Archetype Named v2)Archetype named + contrasting emotionsEnhanced: visceral emotional contrast, human-soundingCC2 Details
ACCC (Acting Challenge CC)Acting challenge + VoiceNet gender/ageChallenge-driven two-scene format β€” same actor, same challenge, contrasting emotional momentsACCC Details
SIT-CC (Situation CC)Situation + EmoNet + contrasting emotionsTwo-scene situation-driven format β€” same actor IN the same situation, two contrasting emotional moments (5,749 pre-generated prompts in en/fr/es/de)SIT-CC Details

Audio Processing

Sidon Speech Restoration

All paths use Sidon (w2v-BERT LoRA encoder + DAC decoder) for speech restoration:

  • Input 16 kHz -> output 48 kHz (simultaneous enhancement + super-resolution)
  • LoRA-adapted w2v-BERT 2.0 extracts clean SSL features from noisy/degraded input
  • DAC-based vocoder synthesizes high-quality 48 kHz audio from the clean features

ChatterboxVC Augmentation

Optionally, Chatterbox VC (S3Gen flow-matching VC) is applied before Sidon:

  • Self-VC (voice-converts to itself) removes TTS artifacts while preserving speaker identity
  • Reference-VC (voice-converts to a reference speaker) enables voice cloning in Path D
  • Both paths are scored with DNS-MOS OVR; the higher-scoring result is kept

DNS-MOS Quality Scoring

Each enhanced candidate is scored using a native PyTorch DNS-MOS model:

  • Predicts SIG (signal quality), BAK (background quality), OVR (overall quality) on a 1-5 scale
  • Used to select between Sidon-only and VC+Sidon augmentation paths
  • Audio is chunked into 9-second windows and scores are averaged

LLM-Guided Audio Splitting (CC/CC2/ACCC)

Two-scene audio is split using a three-phase LLM-guided pipeline:

  1. Whisper Turbo ASR β€” transcribe with word-level timestamps
  2. LLM split point (Gemma 4 E4B-it) β€” reads the DramaBox prompt + ASR word timestamps to identify the exact CUT TO: scene transition timestamp. Matches Scene 1/Scene 2 dialogue to ASR words.
  3. Quiet-spot detection β€” finds the nearest inter-word silence gap within +/-1.5s of the LLM timestamp, then picks the quietest sample (by RMS energy) within that gap. A 15ms margin from word edges guarantees cuts never land inside a word.
  4. LLM fade strategy (Gemma 4 E4B-it) β€” chooses fade-out/fade-in durations (0-200ms) and optional silence gap (0-500ms) based on the emotional contrast between scenes. Options: hard cut, fade, or crossfade.
  5. Fallback β€” if the LLM fails, falls back to longest silence gap in the middle 20-80% of the audio.

Best-of-N Ranking (46 Methods)

For each group of candidates, 46 ranking methods are available:

Quality/CLAP methods (6):

MethodFormula
v_snr_L (default)(1 - WER) x (san_L - neg_san_L + 2)
v_snr_S(1 - WER) x (san_S - neg_san_S + 2)
v_san_L(1 - WER) x (san_L + 1)
v_san_S(1 - WER) x (san_S + 1)
Content EnjoymentRaw Empathic Insight Plus score
Standard(1 - WER) x Content Enjoyment

Where:

  • WER β€” Word Error Rate from Parakeet v3 ASR vs expected dialogue
  • san_L / san_S β€” VoiceCLAP cosine similarity (Large / Small) between audio and sanitized prompt (stage directions only, dialogue removed)
  • neg_san_L / neg_san_S β€” VoiceCLAP similarity to negative text ("robotic, distorted, uncanny, distorted, distortion")

EmoNet emotion methods (40):

Each of the 40 EmoNet emotion dimensions from Empathic Insight Plus is a separate ranking method. Audio is encoded with BUD-E-Whisper (768-dim), pooled (mean+min+max+std = 3072-dim), then scored by 40 specialized MLP expert heads.

Emotion rankings use a WER < 10% hard cutoff β€” only candidates that said the right words qualify. Within qualifying candidates, they are ranked by descending emotion score.

The 40 emotions: Affection, Amusement, Anger, Astonishment/Surprise, Awe, Bitterness, Concentration, Confusion, Contemplation, Contempt, Contentment, Disappointment, Disgust, Distress, Doubt, Elation, Embarrassment, Emotional Numbness, Fatigue/Exhaustion, Fear, Helplessness, Hope/Enthusiasm/Optimism, Impatience/Irritability, Infatuation, Interest, Intoxication/Altered States, Jealousy/Envy, Longing, Malevolence/Malice, Pain, Pleasure/Ecstasy, Pride, Relief, Sadness, Sexual Lust, Shame, Sourness, Teasing, Thankfulness/Gratitude, Triumph.


Taxonomies & Data

The pipeline samples from several structured taxonomies to create diverse, controlled voice performances:

TaxonomySizeFormatDocumentation
VoiceNet57 dimensions x 7 levelsHTMLTaxonomy docs / Interactive viewer
VoiceNet ExtensionSituation-dependent dimsHTMLInteractive viewer
EmoNet40 emotions x 4 intensity levelsJSONTaxonomy docs
Vocal Bursts120 non-linguistic soundsJSONTaxonomy docs
Character Archetypes920 archetypes x 92 genresJSONTaxonomy docs
Acting Challenges19,247 challenge scenariosJSONPreview (100 samples)
Extreme Physical6 categories, 60 subcategories, 600 challengesJSONTension (100), Breathlessness (100), Pain (100), Temperature (100), Taste (100), Surprise (100)
Situation Taxonomy11 dimensions, 289 situationsJSONData file β€” Body posture (32), physical activity (69), speaking target (25), social context (56), environment (22), health (18), face/head gear (14), climate (10), substances (12), fatigue (19), pain (12)

Paper references:

Pre-Generated DramaBox Prompts

79,087 ready-to-use DramaBox two-scene CUT TO: prompts across all pathways and languages:

FilePathwayCountLanguageExamples
dramabox_cca_voicenet.jsonCC-A (VoiceNet)19,332EnglishExamples
dramabox_cc2c_archetype.jsonCC2-C (Archetype)9,999EnglishExamples
dramabox_accc_acting_challenge.jsonACCC (Acting Challenge)12,893EnglishExamples
dramabox_sit_situation.jsonSIT (Situation)5,749en/fr/es/deExamples
dramabox_extreme_physical.jsonExtreme Physical600EnglishExamples
dramabox_cca_voicenet_de.jsonCC-A (VoiceNet)9,983GermanExamples
dramabox_cc2c_archetype_de.jsonCC2-C (Archetype)9,983GermanExamples
dramabox_accc_acting_challenge_de.jsonACCC (Acting Challenge)9,948GermanExamples
dramabox_extreme_physical_de.jsonExtreme Physical600GermanExamples

German prompts use oe/ae/ue instead of umlauts (ΓΆ/Γ€/ΓΌ). Directions and speaker descriptions are in English; only spoken dialogue (in "double quotes") is in the target language.


Standalone Paths β€” Details

Path A β€” VoiceNet (default 80%)

Full 57-dimension voice attribute sampling. The most granular control over voice performance.

  1. Sample language + accent
  2. Sample 1-3 emotions from EmoNet with intensity
  3. Sample 3 mandatory VoiceNet dims (Tempo, Gender, Age) + 5 random from 54 remaining
  4. Determine flow style (scattered/flowing/mixed), emotion alignment, direction style
  5. Optionally include vocal bursts taxonomy
  6. Inject 3 mandatory words from language-specific word list
  7. Construct structured LLM prompt with all constraints -> Gemma 4 generates DramaBox script

See docs/path_a_voicenet.md for full details.

Path B β€” Archetype (default 20%)

Genre/character archetype-based sampling. Focuses on character identity over individual vocal dimensions.

  1. Pick a random genre and archetype from 920 options
  2. Sample language + accent
  3. Sample 1-3 emotions with intensity
  4. Sample Tempo (with fast bias) and Arousal (uniform)
  5. Construct archetype-focused LLM prompt β€” no flow/alignment/direction constraints

See docs/path_b_archetype.md for full details.

Path C β€” Archetype Named

Same as Path B but with explicit instruction to name the archetype role in the DramaBox script output (e.g. "a battle-hardened noble knight" in the speaker description and stage directions). This gives DramaBox TTS a stronger character signal.

See docs/path_c_archetype_named.md for full details.

Path D β€” Reference Audio

The most promising path for voice cloning. Uses reference audio's timbre whisper caption to guide prompt generation, then voice-converts the DramaBox TTS output to match the reference speaker.

  1. Load reference audio metadata (timbre whisper caption)
  2. Generate timbre caption on-the-fly if missing (via laion/timbre-whisper)
  3. Filter VoiceNet dimensions to situation-dependent only (exclude identity: age, gender, timbre, resonance)
  4. Sample 1-3 emotions + tempo + 5 situation-dependent dimensions
  5. Construct LLM prompt with timbre caption + sampled performance attributes
  6. Synthesize with DramaBox TTS (text-only, no voice reference) β€” passing voice_ref directly to DramaBox leads to unstable/garbled generations
  7. Voice-convert generated audio to match reference via Chatterbox VC
  8. Score and rank with Best-of-N

Why text-only TTS + VC? The timbre whisper caption gives Gemma 4 a rich description of the target speaker's vocal qualities, which guides the LLM to produce a speaker-consistent DramaBox script. Chatterbox VC then handles the actual voice transfer. This two-stage approach is far more stable than passing voice_ref directly to DramaBox, which causes garbled or incoherent audio output.

See docs/path_d_reference.md for full details.

Path AC β€” Acting Challenge

Audition-style method acting performances driven by acting challenge scenarios. Samples from 19,247 structured challenges covering diverse emotional and situational contexts.

  1. Sample a random acting challenge (title + instruction) from the challenge database
  2. Sample speaker gender (VoiceNet GEND dimension, 7 levels) and age (AGEV dimension, 7 levels)
  3. Sample word count (40-80 words)
  4. Gemma 4 generates a DramaBox prompt β€” actor performs the challenge naturalistically
  5. DramaBox TTS -> Sidon+VC augmentation -> Best-of-N scoring

Key characteristics:

  • No self-introduction β€” the actor simply begins performing
  • Dynamic emotional arc with at least one turning point or new insight
  • Naturalistic, genuine, spontaneous delivery β€” method acting, not theatrical performance
  • Diverse delivery β€” whispered, loud, sensual, ranting, all valid if authentic

See docs/path_ac_acting_challenge.md for full details.

Path SIT β€” Situation

Situation-driven acting challenges where the actor is physically and socially embedded in a specific situation from the Situation Taxonomy. The taxonomy covers 11 dimensions with 289 total situations describing how body posture, physical activity, speaking target, social context, environment, health conditions, face/head gear, climate, substances, fatigue, and pain affect the voice.

  1. Sample a situation from one of 289 levels across 11 dimensions (e.g. "Lying flat on back", "Eating crunchy food", "Boardroom negotiation", "Freezing cold")
  2. Sample 1-3 emotions from EmoNet with intensity levels
  3. Sample speaker gender (7 levels) and age (6 levels)
  4. DeepSeek V4 Flash generates an acting challenge that places the actor IN this situation β€” the physical/social context naturally affects the voice and performance
  5. Each challenge has an emotional arc with micro-distractions and organic authenticity

The situation taxonomy is based on the Extended VoiceNet Taxonomy (interactive viewer) which extends the core 57 VoiceNet voice attribute dimensions with situation-dependent dimensions that describe how the speaker's physical state and environment affect their vocal output.

See docs/path_sit_situation.md for full details.


Character Consistent Paths β€” Details

All CC paths produce two scenes with the same speaker in contrasting emotional states, separated by a "CUT TO:" marker.

CC v1 (A/B/C) β€” Character Consistent

The original two-scene format. Three sampling variants matching standalone Paths A, B, C:

  • CC-A (VoiceNet): Full 57-dim sampling + contrasting emotions between scenes
  • CC-B (Archetype): Archetype-based + contrasting emotions
  • CC-C (Archetype Named): Named archetype + contrasting emotions

Emotion contrast logic: If Scene 1 has positive emotions -> Scene 2 samples from negative emotions (and vice versa). Word count: 50-80 total (~25-40 per scene).

See docs/path_cc_character_consistent.md for full details.

CC2 v2 (A/B/C) β€” Character Consistent v2

Improved version of CC with enhanced LLM prompting:

  • Scene 1 setup: Before the first dialogue, 1-2 sentences vividly set the emotional situation β€” social context, speaker's state of mind, emotional energy
  • Scene 2 transition: After "CUT TO:", 1-3 sentences explicitly describe the dramatic shift in emotional tone, talking style, delivery, and pace
  • Performance quality emphasis: Delivery must sound like a real, living, breathing human being β€” genuine, spontaneous, authentic, with natural hesitations and organic pacing

See docs/path_cc2_character_consistent_v2.md for full details.

ACCC β€” Acting Challenge Character Consistent

Challenge-driven two-scene format: same actor performing the same acting challenge at two different emotional moments with dramatically shifted delivery. This is the primary path used in the current experiment.

  1. Sample acting challenge + gender + age (same as standalone AC)
  2. Sample word count (40-80 total, split ~evenly between scenes)
  3. Gemma 4 generates two contrasting scenes from the same challenge
  4. DramaBox TTS -> Sidon+VC augmentation -> Best-of-25 scoring
  5. LLM-guided split: Whisper turbo ASR word timestamps + Gemma 4 split-point detection + quiet-spot energy analysis -> Scene 1 + Scene 2

See docs/path_ac_acting_challenge.md#accc-character-consistent for full details.


Quick Start

Installation

git clone https://github.com/LAION-AI/Voice-Acting-Pipeline.git
cd Voice-Acting-Pipeline
pip install -e .

For TTS synthesis (requires GPU with ~24GB VRAM):

pip install -e ".[tts]"

For audio refinement and scoring:

pip install -e ".[refinement,scoring]"

Generate Prompts (Mode 1)

# Generate 1000 DramaBox prompts using GPUs 0 and 1
dramabox generate-prompts --config config.json --total 1000 --gpus 0,1

Synthesize Audio (Mode 2)

# Synthesize audio from an existing CSV
dramabox synthesize --csv output/dramabox_chunk_000.csv --gpus 0,1,2,3

End-to-End (Mode 3)

# Generate prompts and immediately synthesize audio
dramabox run --config config.json --total 1000 --gpus 0,1,2,3

Reference Audio Pipeline β€” Path D (Mode 4)

dramabox reference --config config.json --ref-dir /path/to/references --total 10 --gpus 6,7

Demo Grid (Mode 5)

# Full 4-path demo: A + B + C + D, 10 prompts each, best-of-3 scoring
dramabox demo --config config.json --full --n-prompts 10 --best-of-n 3 --gpus 6,7

Score Audio

dramabox score --audio output/audio/sample_000000_raw.wav --prompt "prompt text" --gpu 0

Configuration

All parameters are in config.json. See config_schema.md for full documentation of every field.

Key Settings

SectionParameterDefaultDescription
prompt_generationllm_modelgoogle/gemma-4-E4B-itLLM for prompt generation
prompt_generationtotal_prompts100000Number of prompts to generate
samplingarchetype_ratio0.20Fraction using archetype path
samplingword_count_min/max10 / 60Target dialogue word count range
ttscfg_scale2.0Classifier-free guidance scale
ttssteps30Euler flow matching steps
best_of_nn_candidates3Candidates per Best-of-N ranking

Adding Languages

Languages are configured in config.json. Currently active: English, German, French, Spanish. Ready to enable: Italian, Dutch, Russian, Portuguese, Chinese, Japanese, Korean, Arabic, Hindi, Turkish, Polish, Swedish.

Models Used

ModelPurposeVRAM
google/gemma-4-E4B-itDramaBox prompt generation~16GB
ResembleAI/DramaboxTTS synthesis (22B DiT)~24GB
sarulab-speech/sidon_raw_weightSpeech restoration (w2v-BERT LoRA + DAC, 16kHz->48kHz)~4GB
Chatterbox VCVoice conversion (S3Gen flow-matching VC)~4GB
DNS-MOS (PyTorch)Quality scoring (SIG/BAK/OVR, 1-5 scale)~0.1GB
laion/VoiceCLAPAudio-text similarity scoring (Large 3584-dim + Small 768-dim)~2GB
laion/Empathic-Insight-Voice-Plus40 EmoNet emotion scoring + content enjoyment (BUD-E-Whisper + MLP)~2GB
laion/BUD-E-WhisperAudio encoder for emotion scoring (768-dim embeddings)~1GB
Whisper turboWord-level timestamps for ASR + audio splitting~3GB
nvidia/parakeet-tdt-0.6b-v3ASR for WER scoring~2GB
laion/timbre-whisperOn-the-fly timbre captioning (Path D)~2GB
MOSS-Audio-8B-ThinkingAudio-guided prompt re-annotation (3 passes per sample)~8GB

Project Structure

Voice-Acting-Pipeline/
β”œβ”€β”€ README.md                          # This file
β”œβ”€β”€ LAION-Voice-Whitepaper.md          # Dataset plan: LAION Voice + Voice Acting corpus
β”œβ”€β”€ config.json                        # All configurable parameters
β”œβ”€β”€ config_schema.md                   # Documentation for config fields
β”œβ”€β”€ pyproject.toml                     # Python packaging
β”œβ”€β”€ run_sample_groups.py               # Full pipeline: TTS + Sidon/VC + ASR + LLM splitting + scoring + HTML
β”œβ”€β”€ run_reannotate.py                  # Standalone Gemma 4 re-annotation + HTML report rebuild
β”œβ”€β”€ run_resplit.py                     # Standalone LLM-guided CUT TO: re-splitting
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ voicenet_ext_taxonomy.html     # VoiceNet (57 dims x 7 levels)
β”‚   β”œβ”€β”€ all_acting_challenges.json     # 19,247 acting challenge scenarios
β”‚   β”œβ”€β”€ acting_challenges_situation_inspired.json  # 5,749 situation-inspired challenges
β”‚   β”œβ”€β”€ acting_challenges_eric_morris_inspired.json # 4,030 Eric Morris-inspired challenges
β”‚   β”œβ”€β”€ acting_challenges_existing_inspired.json    # 7,390 existing challenge variants
β”‚   β”œβ”€β”€ dramabox_cca_voicenet.json     # 19,332 pre-generated CC-A DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype.json   # 9,999 pre-generated CC2-C DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge.json # 12,893 pre-generated ACCC DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_sit_situation.json   # 5,749 pre-generated SIT DramaBox prompts (en/fr/es/de)
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_de.json # 9,983 German CC-A DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_de.json # 9,983 German CC2-C DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_de.json # 9,948 German ACCC DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_extreme_physical.json # 600 extreme physical DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_extreme_physical_de.json # 600 German extreme physical DramaBox prompts
β”‚   β”œβ”€β”€ acting_challenges_extreme_physical.json # 600 extreme physical challenges
β”‚   β”œβ”€β”€ extreme_physical_taxonomy.json # 6 categories x 10 subcategories taxonomy
β”‚   β”œβ”€β”€ situation_taxonomy.json        # Situation taxonomy (poses, activities, contexts)
β”‚   β”œβ”€β”€ emonet_taxonomy.json           # EmoNet (40 emotions x 4 intensity levels)
β”‚   β”œβ”€β”€ vocal_bursts_taxonomy.json     # Vocal bursts (120 types)
β”‚   β”œβ”€β”€ archetypes.json                # Archetypes (920 x 92 genres)
β”‚   └── wordlists/                     # Per-language word lists
β”œβ”€β”€ dramabox/
β”‚   β”œβ”€β”€ cli.py                         # CLI entry point
β”‚   β”œβ”€β”€ config_loader.py               # Config loading and validation
β”‚   β”œβ”€β”€ taxonomy.py                    # Taxonomy parsers and loaders
β”‚   β”œβ”€β”€ sampling.py                    # Path A + Path B sampling
β”‚   β”œβ”€β”€ reference_sampling.py          # Path D: reference audio sampling
β”‚   β”œβ”€β”€ prompts.py                     # LLM prompt construction
β”‚   β”œβ”€β”€ prompt_generator.py            # Multi-GPU LLM batch generation
β”‚   β”œβ”€β”€ tts_synthesizer.py             # Multi-GPU DramaBox TTS
β”‚   β”œβ”€β”€ sidon_enhance.py               # Sidon + ChatterboxVC augmentation (replaces RE-USE + LavaSR)
β”‚   β”œβ”€β”€ reuse_enhance.py               # RE-USE speech enhancement (legacy)
β”‚   β”œβ”€β”€ moss_refine.py                 # MOSS-Audio re-annotation (audio-guided prompt rewriting)
β”‚   β”œβ”€β”€ moss_pipeline.py               # MOSS orchestrator (multi-GPU job distribution)
β”‚   β”œβ”€β”€ scoring.py                     # ASR WER + content enjoyment + EmoNet scoring
β”‚   β”œβ”€β”€ demo_grid.py                   # HTML demo grid generator
β”‚   └── pipeline.py                    # Mode 1-6 orchestrator
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ _accc_lavasr_pipeline.py       # ACCC LavaSR experiment pipeline (current)
β”‚   β”œβ”€β”€ _emonet_worker.py              # EmoNet 40-emotion GPU worker
β”‚   β”œβ”€β”€ _score_worker.py               # WER + content enjoyment GPU worker
β”‚   β”œβ”€β”€ _lavasr_worker.py              # LavaSR BWE GPU worker
β”‚   └── _lavasr_clap_worker.py         # VoiceCLAP scoring GPU worker
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ voicenet_taxonomy.md           # VoiceNet 57-dim taxonomy
β”‚   β”œβ”€β”€ voicenet_extension_taxonomy.html  # Interactive VoiceNet viewer
β”‚   β”œβ”€β”€ emonet_taxonomy.md             # EmoNet 40 emotions
β”‚   β”œβ”€β”€ vocal_bursts_taxonomy.md       # 120 vocal bursts
β”‚   β”œβ”€β”€ archetypes.md                  # 920 archetypes
β”‚   β”œβ”€β”€ acting_challenges_preview.html # Acting challenge preview (100 samples)
β”‚   β”œβ”€β”€ paper_reference.md             # Citation and BibTeX
β”‚   β”œβ”€β”€ path_a_voicenet.md             # Path A detailed docs
β”‚   β”œβ”€β”€ path_b_archetype.md            # Path B detailed docs
β”‚   β”œβ”€β”€ path_c_archetype_named.md      # Path C detailed docs
β”‚   β”œβ”€β”€ path_d_reference.md            # Path D detailed docs
β”‚   β”œβ”€β”€ path_ac_acting_challenge.md    # AC + ACCC detailed docs
β”‚   β”œβ”€β”€ path_sit_situation.md          # SIT + SIT-CC situation pathway docs
β”‚   β”œβ”€β”€ path_cc_character_consistent.md   # CC v1 detailed docs
β”‚   β”œβ”€β”€ path_cc2_character_consistent_v2.md  # CC2 v2 detailed docs
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_examples.md        # CC-A English examples
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_examples.md      # CC2-C English examples
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_examples.md # ACCC English examples
β”‚   β”œβ”€β”€ dramabox_sit_situation_examples.md       # SIT multilingual examples
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_de_examples.md     # CC-A German examples
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_de_examples.md   # CC2-C German examples
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_de_examples.md # ACCC German examples
β”‚   β”œβ”€β”€ dramabox_extreme_physical_examples.md    # Extreme Physical English examples
β”‚   β”œβ”€β”€ dramabox_extreme_physical_de_examples.md # Extreme Physical German examples
β”‚   └── demo/                          # HTML demo grids with embedded audio
β”‚       β”œβ”€β”€ sidon_vc_sample_groups.html # Sidon+VC experiment (20 groups, LLM splits)
β”‚       β”œβ”€β”€ accc_lavasr.html           # ACCC LavaSR index (redirects to page 1)
β”‚       β”œβ”€β”€ accc_lavasr_p1.html        # ACCC LavaSR grid pages 1-10
β”‚       β”œβ”€β”€ ...
β”‚       └── pitch_analysis.html        # Pitch analysis
└── examples/
    └── example_prompt.txt             # Sample DramaBox prompt

Hardware Requirements

ComponentMinimumRecommended
Prompt generation1 GPU, 16GB VRAM4+ GPUs, 16GB+ each
TTS synthesis1 GPU, 24GB VRAM4+ GPUs, 24GB+ each
Sidon + ChatterboxVC augmentation1 GPU, 12GB VRAM8 GPUs (parallel workers)
MOSS re-annotation1 GPU, 8GB VRAM (4-bit)8 GPUs (parallel workers)
VoiceCLAP + EmoNet scoring1 GPU, 4GB VRAM8 GPUs (parallel workers)
RAM32GB64GB+

MOSS Re-Annotation (Audio-Guided Prompt Rewriting)

After post-processing, the pipeline runs a MOSS re-annotation pass (dramabox/moss_refine.py) that closes the loop between intended and actual performance.

Concept

Original DramaBox prompts are directions β€” the TTS model interprets them, and the actual audio may differ from what was requested. MOSS-Audio-8B-Thinking listens to each generated audio clip together with the original prompt and ASR transcript, then rewrites the prompt to match what was actually performed.

Three Inference Passes Per Sample

  1. Full audio -> refined two-scene prompt matching the actual performance
  2. Part 1 audio -> standalone single-scene prompt for Scene 1
  3. Part 2 audio -> standalone single-scene prompt for Scene 2

Architecture

Original DramaBox Prompt
        +
ASR Transcript (from Whisper)
        +
Generated Audio (MP3)
        |
        v
+---------------------------+
|  MOSS-Audio-8B-Thinking   |
|  (4-bit, per-GPU worker)  |
|                           |
|  Listens to audio +       |
|  reads text context        |
|                           |
|  Rewrites prompt to       |
|  match actual performance  |
+---------------------------+
        |
        v
moss_refined_prompt_full
moss_refined_prompt_part1
moss_refined_prompt_part2

Why Re-Annotation Matters

  • Original prompts are suggestions, not guarantees
  • Audio may differ from prompt due to TTS interpretation
  • MOSS-refined prompts become ground truth for annotations
  • Enables training on what models actually do, not what we asked for

Usage

# Run MOSS re-annotation on all post-processed samples
python dramabox/moss_refine.py                    # All GPUs
python dramabox/moss_refine.py --num-gpus 4       # 4 GPUs
python dramabox/moss_refine.py --test             # First 10 samples, 1 GPU

Requires /tmp/moss_venv with transformers==4.57.1 (MOSS is incompatible with transformers >= 5.x).


License

Emotion LoRAs for MOSS-TTS (40 emotions)

We trained one LoRA adapter per EmoNet emotion for the MOSS-TTS-Local-Transformer-4.55B voice-acting model, so an emotion can be applied on top of ordinary voice cloning. Each adapter is the best of a rank {16, 32, 64} sweep: for scarce data a lower rank curbs overfitting, and the winner is picked by a combined score over emotion intensity, vocal-burst-blend, genuineness and speaker similarity.

Data (per emotion, ~1,000–1,400 clips): natural in-the-wild speech (EmoLia) is preferred and filled with the most intense LAION's Got Talent clips; ~25% of rows carry a same-voice, contrasting-emotion reference; instructions are procedural emotion captions from procedural-voice-captions.

The demo plays five neutral sentences per emotion in three languages, comparing the LoRA with and without an emotion reference; the LoRA raises the automatic EmoNet emotion score while keeping the voice and naturalness.

Contributors

LAION-AI/Voice-Acting-Pipeline

Self-contained DramaBox voice acting pipeline: VoiceNet taxonomy, multi-GPU prompt generation, TTS synthesis, and audio refinement

4

stars

36

commits

Python

primary language

Jul 29, 2026

updated

README

Voice Acting Pipeline

By Christoph Schuhmann

Open-weights voice acting data pipeline combining structured taxonomy sampling, DramaBox TTS synthesis, Sidon speech restoration, and ChatterboxVC augmentation with best-of-N ranking across 46 scoring methods.

Live Demo: Sidon+VC Sample Groups β€” 20 groups x 25 candidates with LLM-guided CUT TO: splitting, Whisper turbo ASR, and Gemma 4 re-annotation.

Benchmarks (landing page):

Dataset Plan: See the full technical white paper β€” Towards an Emotionally Expressive Audio Omni-Model β€” for the complete LAION Voice and LAION Voice Acting dataset construction plan, model inventory, and annotation strategy.


DramaBox Voice Acting Data Pipeline

End-to-end voice prompt generation and audio synthesis using the DramaBox TTS model (22B DiT transformer) and structured voice taxonomy sampling. Based on the voice taxonomy research from Schuhmann et al., 2025 and EmoNet-Voice (Schuhmann et al., 2025).

This pipeline generates richly annotated voice performance prompts in the DramaBox format β€” single-speaker scenes with stage directions (English) and spoken dialogue (target language) β€” then synthesizes them into audio. Each prompt is procedurally constructed by sampling from structured taxonomies, then expanded by an LLM (Gemma 4 E4B-it) into a full performance script.

Current Pipeline: DramaBox + Sidon + ChatterboxVC

The full audio processing chain:

Taxonomy Sampling          LLM Prompt Gen         DramaBox TTS (22B)
(VoiceNet/Archetype/       (Gemma 4 E4B-it)       CFG=2.5, STG=1.5
 Situation/ActingChall)                            25 candidates/prompt
        |                        |                        |
        +------------------------+                        |
                                                          v
                                              +---------------------------+
                                              |  Per-Sample Augment       |
                                              |                           |
                                              |  Path A: Sidon only       |
                                              |    (16kHz -> 48kHz)       |
                                              |  Path B: ChatterboxVC     |
                                              |    + Sidon (VC -> restore)|
                                              |                           |
                                              |  Pick best by             |
                                              |  DNS-MOS OVR score        |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Whisper Turbo ASR        |
                                              |  (word-level timestamps)  |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  LLM-Guided CUT TO:      |
                                              |  Split (Gemma 4 E4B-it)  |
                                              |  + quiet-spot detection   |
                                              |  + LLM fade strategy     |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Best-of-25 Ranking       |
                                              |  (WER, VoiceCLAP,         |
                                              |   EmoNet, Content)        |
                                              +-------------+-------------+
                                                            |
                                              +-------------v-------------+
                                              |  Gemma 4 Re-annotation    |
                                              |  (ASR -> refined prompt)  |
                                              +---------------------------+

Augmentation Sub-Pipeline

For each raw TTS candidate, two enhancement paths run and the best is selected:

Raw TTS Audio ──┬──► Sidon Speech Restoration ──► DNS-MOS ──┐
(from DramaBox)  β”‚    (w2v-BERT LoRA + DAC)                   β”œβ”€β”€β–Ί Pick higher OVR
                 β”‚    (16kHz β†’ 48kHz)                         β”‚
                 └──► ChatterboxVC ──► Sidon ──► DNS-MOS β”€β”€β”€β”€β”˜
                      (S3Gen flow-matching VC,
                       self-VC or ref-VC)

Two-Part CUT TO: Pipeline

For two-scene audio, a self-VC of the full audio provides the VC target for speaker consistency:

Full Audio ──► Self-VC ──► Sidon ──► full_enhanced (VC target)
                                           β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
Part 1 ──┬──► Sidon only ──► DNS-MOS ──┐
         β”‚                              β”œβ”€β”€β–Ί Pick best
         └──► VC(β†’full_enhanced) + Sidon ──► DNS-MOS β”€β”€β”˜

Part 2 ──┬──► Sidon only ──► DNS-MOS ──┐
         β”‚                              β”œβ”€β”€β–Ί Pick best
         └──► VC(β†’full_enhanced) + Sidon ──► DNS-MOS β”€β”€β”˜

Scoring methods (46 total):

  • 6 quality/CLAP methods β€” combine WER, VoiceCLAP similarity (Large + Small), content enjoyment, with (1-WER) multiplicative factor
  • 40 EmoNet emotion methods β€” one per emotion dimension (Empathic Insight Plus), with WER < 10% hard cutoff

Demo Grids

Sidon + ChatterboxVC Pipeline (Current)

Listen to the latest Sidon+VC experiment β€” 20 groups x 25 candidates = 500 audio clips with LLM-guided CUT TO: splitting and Gemma 4 re-annotation.

DemoDescriptionLink
Sidon+VC Sample Groups20 groups, best-of-25, LLM-guided splitssidon_vc_sample_groups.html

ACCC LavaSR Experiment (Legacy)

50 groups x 25 candidates = 1,250 audio clips across 10 pages. Each page has an interactive ranking dropdown with 46 methods.

PageGroupsLink
Page 1Groups 0-4accc_lavasr_p1.html
Page 2Groups 5-9accc_lavasr_p2.html
Page 3Groups 10-14accc_lavasr_p3.html
Page 4Groups 15-19accc_lavasr_p4.html
Page 5Groups 20-24accc_lavasr_p5.html
Page 6Groups 25-29accc_lavasr_p6.html
Page 7Groups 30-34accc_lavasr_p7.html
Page 8Groups 35-39accc_lavasr_p8.html
Page 9Groups 40-44accc_lavasr_p9.html
Page 10Groups 45-49accc_lavasr_p10.html

Also available:


All Paths at a Glance

The pipeline supports 12 generation paths organized into three families. Each path uses a different sampling strategy to produce diverse voice acting data.

Standalone Paths (Single Scene)

PathSamplingDescriptionDetails
A (VoiceNet)57 VoiceNet dims + EmoNet + Vocal BurstsFull taxonomy sampling: 3 mandatory dims (Tempo, Gender, Age) + 5 random, 1-3 emotions, flow style, mandatory wordsPath A Details
B (Archetype)920 archetypes x 92 genresGenre/character archetype-based: random archetype + emotions + Tempo/ArousalPath B Details
C (Archetype Named)Same as B + explicit namingArchetype with explicit role naming in the DramaBox script (e.g. "a battle-hardened noble knight")Path C Details
D (Reference Audio)Timbre whisper + VoiceNet + Chatterbox VCReference audio pipeline: timbre caption guides prompt, DramaBox TTS + voice conversion to match reference speakerPath D Details
AC (Acting Challenge)19,247 acting challenges + VoiceNet gender/ageAudition-style method acting from challenge scenarios β€” naturalistic, genuine, dynamic emotional arcAC Details
SIT (Situation)289 situations x EmoNet emotionsSituation-driven acting: actor is physically/socially IN a specific situation from the Situation Taxonomy (body posture, activity, social context, environment, health, climate, fatigue, pain) with sampled emotionsSIT Details

Character Consistent Paths (Two Scenes β€” "CUT TO:")

All CC paths generate two scenes with the same speaker in contrasting emotional states, separated by a "CUT TO:" marker. The speaker's fundamental voice (age, gender, timbre) stays identical β€” only the emotional delivery changes. Audio is split into Scene 1 / Scene 2 using LLM-guided splitting (Gemma 4 E4B-it + Whisper turbo word-level timestamps + quiet-spot detection).

PathSamplingKey ImprovementDetails
CC-A (VoiceNet)VoiceNet + contrasting emotionsOriginal two-scene formatCC Details
CC-B (Archetype)Archetype + contrasting emotionsOriginal two-scene formatCC Details
CC-C (Archetype Named)Archetype named + contrasting emotionsOriginal two-scene formatCC Details
CC2-A (VoiceNet v2)VoiceNet + contrasting emotionsEnhanced: explicit emotional scene setup + dramatic transition descriptionsCC2 Details
CC2-B (Archetype v2)Archetype + contrasting emotionsEnhanced: genuine/spontaneous/authentic delivery emphasisCC2 Details
CC2-C (Archetype Named v2)Archetype named + contrasting emotionsEnhanced: visceral emotional contrast, human-soundingCC2 Details
ACCC (Acting Challenge CC)Acting challenge + VoiceNet gender/ageChallenge-driven two-scene format β€” same actor, same challenge, contrasting emotional momentsACCC Details
SIT-CC (Situation CC)Situation + EmoNet + contrasting emotionsTwo-scene situation-driven format β€” same actor IN the same situation, two contrasting emotional moments (5,749 pre-generated prompts in en/fr/es/de)SIT-CC Details

Audio Processing

Sidon Speech Restoration

All paths use Sidon (w2v-BERT LoRA encoder + DAC decoder) for speech restoration:

  • Input 16 kHz -> output 48 kHz (simultaneous enhancement + super-resolution)
  • LoRA-adapted w2v-BERT 2.0 extracts clean SSL features from noisy/degraded input
  • DAC-based vocoder synthesizes high-quality 48 kHz audio from the clean features

ChatterboxVC Augmentation

Optionally, Chatterbox VC (S3Gen flow-matching VC) is applied before Sidon:

  • Self-VC (voice-converts to itself) removes TTS artifacts while preserving speaker identity
  • Reference-VC (voice-converts to a reference speaker) enables voice cloning in Path D
  • Both paths are scored with DNS-MOS OVR; the higher-scoring result is kept

DNS-MOS Quality Scoring

Each enhanced candidate is scored using a native PyTorch DNS-MOS model:

  • Predicts SIG (signal quality), BAK (background quality), OVR (overall quality) on a 1-5 scale
  • Used to select between Sidon-only and VC+Sidon augmentation paths
  • Audio is chunked into 9-second windows and scores are averaged

LLM-Guided Audio Splitting (CC/CC2/ACCC)

Two-scene audio is split using a three-phase LLM-guided pipeline:

  1. Whisper Turbo ASR β€” transcribe with word-level timestamps
  2. LLM split point (Gemma 4 E4B-it) β€” reads the DramaBox prompt + ASR word timestamps to identify the exact CUT TO: scene transition timestamp. Matches Scene 1/Scene 2 dialogue to ASR words.
  3. Quiet-spot detection β€” finds the nearest inter-word silence gap within +/-1.5s of the LLM timestamp, then picks the quietest sample (by RMS energy) within that gap. A 15ms margin from word edges guarantees cuts never land inside a word.
  4. LLM fade strategy (Gemma 4 E4B-it) β€” chooses fade-out/fade-in durations (0-200ms) and optional silence gap (0-500ms) based on the emotional contrast between scenes. Options: hard cut, fade, or crossfade.
  5. Fallback β€” if the LLM fails, falls back to longest silence gap in the middle 20-80% of the audio.

Best-of-N Ranking (46 Methods)

For each group of candidates, 46 ranking methods are available:

Quality/CLAP methods (6):

MethodFormula
v_snr_L (default)(1 - WER) x (san_L - neg_san_L + 2)
v_snr_S(1 - WER) x (san_S - neg_san_S + 2)
v_san_L(1 - WER) x (san_L + 1)
v_san_S(1 - WER) x (san_S + 1)
Content EnjoymentRaw Empathic Insight Plus score
Standard(1 - WER) x Content Enjoyment

Where:

  • WER β€” Word Error Rate from Parakeet v3 ASR vs expected dialogue
  • san_L / san_S β€” VoiceCLAP cosine similarity (Large / Small) between audio and sanitized prompt (stage directions only, dialogue removed)
  • neg_san_L / neg_san_S β€” VoiceCLAP similarity to negative text ("robotic, distorted, uncanny, distorted, distortion")

EmoNet emotion methods (40):

Each of the 40 EmoNet emotion dimensions from Empathic Insight Plus is a separate ranking method. Audio is encoded with BUD-E-Whisper (768-dim), pooled (mean+min+max+std = 3072-dim), then scored by 40 specialized MLP expert heads.

Emotion rankings use a WER < 10% hard cutoff β€” only candidates that said the right words qualify. Within qualifying candidates, they are ranked by descending emotion score.

The 40 emotions: Affection, Amusement, Anger, Astonishment/Surprise, Awe, Bitterness, Concentration, Confusion, Contemplation, Contempt, Contentment, Disappointment, Disgust, Distress, Doubt, Elation, Embarrassment, Emotional Numbness, Fatigue/Exhaustion, Fear, Helplessness, Hope/Enthusiasm/Optimism, Impatience/Irritability, Infatuation, Interest, Intoxication/Altered States, Jealousy/Envy, Longing, Malevolence/Malice, Pain, Pleasure/Ecstasy, Pride, Relief, Sadness, Sexual Lust, Shame, Sourness, Teasing, Thankfulness/Gratitude, Triumph.


Taxonomies & Data

The pipeline samples from several structured taxonomies to create diverse, controlled voice performances:

TaxonomySizeFormatDocumentation
VoiceNet57 dimensions x 7 levelsHTMLTaxonomy docs / Interactive viewer
VoiceNet ExtensionSituation-dependent dimsHTMLInteractive viewer
EmoNet40 emotions x 4 intensity levelsJSONTaxonomy docs
Vocal Bursts120 non-linguistic soundsJSONTaxonomy docs
Character Archetypes920 archetypes x 92 genresJSONTaxonomy docs
Acting Challenges19,247 challenge scenariosJSONPreview (100 samples)
Extreme Physical6 categories, 60 subcategories, 600 challengesJSONTension (100), Breathlessness (100), Pain (100), Temperature (100), Taste (100), Surprise (100)
Situation Taxonomy11 dimensions, 289 situationsJSONData file β€” Body posture (32), physical activity (69), speaking target (25), social context (56), environment (22), health (18), face/head gear (14), climate (10), substances (12), fatigue (19), pain (12)

Paper references:

Pre-Generated DramaBox Prompts

79,087 ready-to-use DramaBox two-scene CUT TO: prompts across all pathways and languages:

FilePathwayCountLanguageExamples
dramabox_cca_voicenet.jsonCC-A (VoiceNet)19,332EnglishExamples
dramabox_cc2c_archetype.jsonCC2-C (Archetype)9,999EnglishExamples
dramabox_accc_acting_challenge.jsonACCC (Acting Challenge)12,893EnglishExamples
dramabox_sit_situation.jsonSIT (Situation)5,749en/fr/es/deExamples
dramabox_extreme_physical.jsonExtreme Physical600EnglishExamples
dramabox_cca_voicenet_de.jsonCC-A (VoiceNet)9,983GermanExamples
dramabox_cc2c_archetype_de.jsonCC2-C (Archetype)9,983GermanExamples
dramabox_accc_acting_challenge_de.jsonACCC (Acting Challenge)9,948GermanExamples
dramabox_extreme_physical_de.jsonExtreme Physical600GermanExamples

German prompts use oe/ae/ue instead of umlauts (ΓΆ/Γ€/ΓΌ). Directions and speaker descriptions are in English; only spoken dialogue (in "double quotes") is in the target language.


Standalone Paths β€” Details

Path A β€” VoiceNet (default 80%)

Full 57-dimension voice attribute sampling. The most granular control over voice performance.

  1. Sample language + accent
  2. Sample 1-3 emotions from EmoNet with intensity
  3. Sample 3 mandatory VoiceNet dims (Tempo, Gender, Age) + 5 random from 54 remaining
  4. Determine flow style (scattered/flowing/mixed), emotion alignment, direction style
  5. Optionally include vocal bursts taxonomy
  6. Inject 3 mandatory words from language-specific word list
  7. Construct structured LLM prompt with all constraints -> Gemma 4 generates DramaBox script

See docs/path_a_voicenet.md for full details.

Path B β€” Archetype (default 20%)

Genre/character archetype-based sampling. Focuses on character identity over individual vocal dimensions.

  1. Pick a random genre and archetype from 920 options
  2. Sample language + accent
  3. Sample 1-3 emotions with intensity
  4. Sample Tempo (with fast bias) and Arousal (uniform)
  5. Construct archetype-focused LLM prompt β€” no flow/alignment/direction constraints

See docs/path_b_archetype.md for full details.

Path C β€” Archetype Named

Same as Path B but with explicit instruction to name the archetype role in the DramaBox script output (e.g. "a battle-hardened noble knight" in the speaker description and stage directions). This gives DramaBox TTS a stronger character signal.

See docs/path_c_archetype_named.md for full details.

Path D β€” Reference Audio

The most promising path for voice cloning. Uses reference audio's timbre whisper caption to guide prompt generation, then voice-converts the DramaBox TTS output to match the reference speaker.

  1. Load reference audio metadata (timbre whisper caption)
  2. Generate timbre caption on-the-fly if missing (via laion/timbre-whisper)
  3. Filter VoiceNet dimensions to situation-dependent only (exclude identity: age, gender, timbre, resonance)
  4. Sample 1-3 emotions + tempo + 5 situation-dependent dimensions
  5. Construct LLM prompt with timbre caption + sampled performance attributes
  6. Synthesize with DramaBox TTS (text-only, no voice reference) β€” passing voice_ref directly to DramaBox leads to unstable/garbled generations
  7. Voice-convert generated audio to match reference via Chatterbox VC
  8. Score and rank with Best-of-N

Why text-only TTS + VC? The timbre whisper caption gives Gemma 4 a rich description of the target speaker's vocal qualities, which guides the LLM to produce a speaker-consistent DramaBox script. Chatterbox VC then handles the actual voice transfer. This two-stage approach is far more stable than passing voice_ref directly to DramaBox, which causes garbled or incoherent audio output.

See docs/path_d_reference.md for full details.

Path AC β€” Acting Challenge

Audition-style method acting performances driven by acting challenge scenarios. Samples from 19,247 structured challenges covering diverse emotional and situational contexts.

  1. Sample a random acting challenge (title + instruction) from the challenge database
  2. Sample speaker gender (VoiceNet GEND dimension, 7 levels) and age (AGEV dimension, 7 levels)
  3. Sample word count (40-80 words)
  4. Gemma 4 generates a DramaBox prompt β€” actor performs the challenge naturalistically
  5. DramaBox TTS -> Sidon+VC augmentation -> Best-of-N scoring

Key characteristics:

  • No self-introduction β€” the actor simply begins performing
  • Dynamic emotional arc with at least one turning point or new insight
  • Naturalistic, genuine, spontaneous delivery β€” method acting, not theatrical performance
  • Diverse delivery β€” whispered, loud, sensual, ranting, all valid if authentic

See docs/path_ac_acting_challenge.md for full details.

Path SIT β€” Situation

Situation-driven acting challenges where the actor is physically and socially embedded in a specific situation from the Situation Taxonomy. The taxonomy covers 11 dimensions with 289 total situations describing how body posture, physical activity, speaking target, social context, environment, health conditions, face/head gear, climate, substances, fatigue, and pain affect the voice.

  1. Sample a situation from one of 289 levels across 11 dimensions (e.g. "Lying flat on back", "Eating crunchy food", "Boardroom negotiation", "Freezing cold")
  2. Sample 1-3 emotions from EmoNet with intensity levels
  3. Sample speaker gender (7 levels) and age (6 levels)
  4. DeepSeek V4 Flash generates an acting challenge that places the actor IN this situation β€” the physical/social context naturally affects the voice and performance
  5. Each challenge has an emotional arc with micro-distractions and organic authenticity

The situation taxonomy is based on the Extended VoiceNet Taxonomy (interactive viewer) which extends the core 57 VoiceNet voice attribute dimensions with situation-dependent dimensions that describe how the speaker's physical state and environment affect their vocal output.

See docs/path_sit_situation.md for full details.


Character Consistent Paths β€” Details

All CC paths produce two scenes with the same speaker in contrasting emotional states, separated by a "CUT TO:" marker.

CC v1 (A/B/C) β€” Character Consistent

The original two-scene format. Three sampling variants matching standalone Paths A, B, C:

  • CC-A (VoiceNet): Full 57-dim sampling + contrasting emotions between scenes
  • CC-B (Archetype): Archetype-based + contrasting emotions
  • CC-C (Archetype Named): Named archetype + contrasting emotions

Emotion contrast logic: If Scene 1 has positive emotions -> Scene 2 samples from negative emotions (and vice versa). Word count: 50-80 total (~25-40 per scene).

See docs/path_cc_character_consistent.md for full details.

CC2 v2 (A/B/C) β€” Character Consistent v2

Improved version of CC with enhanced LLM prompting:

  • Scene 1 setup: Before the first dialogue, 1-2 sentences vividly set the emotional situation β€” social context, speaker's state of mind, emotional energy
  • Scene 2 transition: After "CUT TO:", 1-3 sentences explicitly describe the dramatic shift in emotional tone, talking style, delivery, and pace
  • Performance quality emphasis: Delivery must sound like a real, living, breathing human being β€” genuine, spontaneous, authentic, with natural hesitations and organic pacing

See docs/path_cc2_character_consistent_v2.md for full details.

ACCC β€” Acting Challenge Character Consistent

Challenge-driven two-scene format: same actor performing the same acting challenge at two different emotional moments with dramatically shifted delivery. This is the primary path used in the current experiment.

  1. Sample acting challenge + gender + age (same as standalone AC)
  2. Sample word count (40-80 total, split ~evenly between scenes)
  3. Gemma 4 generates two contrasting scenes from the same challenge
  4. DramaBox TTS -> Sidon+VC augmentation -> Best-of-25 scoring
  5. LLM-guided split: Whisper turbo ASR word timestamps + Gemma 4 split-point detection + quiet-spot energy analysis -> Scene 1 + Scene 2

See docs/path_ac_acting_challenge.md#accc-character-consistent for full details.


Quick Start

Installation

git clone https://github.com/LAION-AI/Voice-Acting-Pipeline.git
cd Voice-Acting-Pipeline
pip install -e .

For TTS synthesis (requires GPU with ~24GB VRAM):

pip install -e ".[tts]"

For audio refinement and scoring:

pip install -e ".[refinement,scoring]"

Generate Prompts (Mode 1)

# Generate 1000 DramaBox prompts using GPUs 0 and 1
dramabox generate-prompts --config config.json --total 1000 --gpus 0,1

Synthesize Audio (Mode 2)

# Synthesize audio from an existing CSV
dramabox synthesize --csv output/dramabox_chunk_000.csv --gpus 0,1,2,3

End-to-End (Mode 3)

# Generate prompts and immediately synthesize audio
dramabox run --config config.json --total 1000 --gpus 0,1,2,3

Reference Audio Pipeline β€” Path D (Mode 4)

dramabox reference --config config.json --ref-dir /path/to/references --total 10 --gpus 6,7

Demo Grid (Mode 5)

# Full 4-path demo: A + B + C + D, 10 prompts each, best-of-3 scoring
dramabox demo --config config.json --full --n-prompts 10 --best-of-n 3 --gpus 6,7

Score Audio

dramabox score --audio output/audio/sample_000000_raw.wav --prompt "prompt text" --gpu 0

Configuration

All parameters are in config.json. See config_schema.md for full documentation of every field.

Key Settings

SectionParameterDefaultDescription
prompt_generationllm_modelgoogle/gemma-4-E4B-itLLM for prompt generation
prompt_generationtotal_prompts100000Number of prompts to generate
samplingarchetype_ratio0.20Fraction using archetype path
samplingword_count_min/max10 / 60Target dialogue word count range
ttscfg_scale2.0Classifier-free guidance scale
ttssteps30Euler flow matching steps
best_of_nn_candidates3Candidates per Best-of-N ranking

Adding Languages

Languages are configured in config.json. Currently active: English, German, French, Spanish. Ready to enable: Italian, Dutch, Russian, Portuguese, Chinese, Japanese, Korean, Arabic, Hindi, Turkish, Polish, Swedish.

Models Used

ModelPurposeVRAM
google/gemma-4-E4B-itDramaBox prompt generation~16GB
ResembleAI/DramaboxTTS synthesis (22B DiT)~24GB
sarulab-speech/sidon_raw_weightSpeech restoration (w2v-BERT LoRA + DAC, 16kHz->48kHz)~4GB
Chatterbox VCVoice conversion (S3Gen flow-matching VC)~4GB
DNS-MOS (PyTorch)Quality scoring (SIG/BAK/OVR, 1-5 scale)~0.1GB
laion/VoiceCLAPAudio-text similarity scoring (Large 3584-dim + Small 768-dim)~2GB
laion/Empathic-Insight-Voice-Plus40 EmoNet emotion scoring + content enjoyment (BUD-E-Whisper + MLP)~2GB
laion/BUD-E-WhisperAudio encoder for emotion scoring (768-dim embeddings)~1GB
Whisper turboWord-level timestamps for ASR + audio splitting~3GB
nvidia/parakeet-tdt-0.6b-v3ASR for WER scoring~2GB
laion/timbre-whisperOn-the-fly timbre captioning (Path D)~2GB
MOSS-Audio-8B-ThinkingAudio-guided prompt re-annotation (3 passes per sample)~8GB

Project Structure

Voice-Acting-Pipeline/
β”œβ”€β”€ README.md                          # This file
β”œβ”€β”€ LAION-Voice-Whitepaper.md          # Dataset plan: LAION Voice + Voice Acting corpus
β”œβ”€β”€ config.json                        # All configurable parameters
β”œβ”€β”€ config_schema.md                   # Documentation for config fields
β”œβ”€β”€ pyproject.toml                     # Python packaging
β”œβ”€β”€ run_sample_groups.py               # Full pipeline: TTS + Sidon/VC + ASR + LLM splitting + scoring + HTML
β”œβ”€β”€ run_reannotate.py                  # Standalone Gemma 4 re-annotation + HTML report rebuild
β”œβ”€β”€ run_resplit.py                     # Standalone LLM-guided CUT TO: re-splitting
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ voicenet_ext_taxonomy.html     # VoiceNet (57 dims x 7 levels)
β”‚   β”œβ”€β”€ all_acting_challenges.json     # 19,247 acting challenge scenarios
β”‚   β”œβ”€β”€ acting_challenges_situation_inspired.json  # 5,749 situation-inspired challenges
β”‚   β”œβ”€β”€ acting_challenges_eric_morris_inspired.json # 4,030 Eric Morris-inspired challenges
β”‚   β”œβ”€β”€ acting_challenges_existing_inspired.json    # 7,390 existing challenge variants
β”‚   β”œβ”€β”€ dramabox_cca_voicenet.json     # 19,332 pre-generated CC-A DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype.json   # 9,999 pre-generated CC2-C DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge.json # 12,893 pre-generated ACCC DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_sit_situation.json   # 5,749 pre-generated SIT DramaBox prompts (en/fr/es/de)
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_de.json # 9,983 German CC-A DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_de.json # 9,983 German CC2-C DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_de.json # 9,948 German ACCC DramaBox prompts (no umlauts)
β”‚   β”œβ”€β”€ dramabox_extreme_physical.json # 600 extreme physical DramaBox prompts
β”‚   β”œβ”€β”€ dramabox_extreme_physical_de.json # 600 German extreme physical DramaBox prompts
β”‚   β”œβ”€β”€ acting_challenges_extreme_physical.json # 600 extreme physical challenges
β”‚   β”œβ”€β”€ extreme_physical_taxonomy.json # 6 categories x 10 subcategories taxonomy
β”‚   β”œβ”€β”€ situation_taxonomy.json        # Situation taxonomy (poses, activities, contexts)
β”‚   β”œβ”€β”€ emonet_taxonomy.json           # EmoNet (40 emotions x 4 intensity levels)
β”‚   β”œβ”€β”€ vocal_bursts_taxonomy.json     # Vocal bursts (120 types)
β”‚   β”œβ”€β”€ archetypes.json                # Archetypes (920 x 92 genres)
β”‚   └── wordlists/                     # Per-language word lists
β”œβ”€β”€ dramabox/
β”‚   β”œβ”€β”€ cli.py                         # CLI entry point
β”‚   β”œβ”€β”€ config_loader.py               # Config loading and validation
β”‚   β”œβ”€β”€ taxonomy.py                    # Taxonomy parsers and loaders
β”‚   β”œβ”€β”€ sampling.py                    # Path A + Path B sampling
β”‚   β”œβ”€β”€ reference_sampling.py          # Path D: reference audio sampling
β”‚   β”œβ”€β”€ prompts.py                     # LLM prompt construction
β”‚   β”œβ”€β”€ prompt_generator.py            # Multi-GPU LLM batch generation
β”‚   β”œβ”€β”€ tts_synthesizer.py             # Multi-GPU DramaBox TTS
β”‚   β”œβ”€β”€ sidon_enhance.py               # Sidon + ChatterboxVC augmentation (replaces RE-USE + LavaSR)
β”‚   β”œβ”€β”€ reuse_enhance.py               # RE-USE speech enhancement (legacy)
β”‚   β”œβ”€β”€ moss_refine.py                 # MOSS-Audio re-annotation (audio-guided prompt rewriting)
β”‚   β”œβ”€β”€ moss_pipeline.py               # MOSS orchestrator (multi-GPU job distribution)
β”‚   β”œβ”€β”€ scoring.py                     # ASR WER + content enjoyment + EmoNet scoring
β”‚   β”œβ”€β”€ demo_grid.py                   # HTML demo grid generator
β”‚   └── pipeline.py                    # Mode 1-6 orchestrator
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ _accc_lavasr_pipeline.py       # ACCC LavaSR experiment pipeline (current)
β”‚   β”œβ”€β”€ _emonet_worker.py              # EmoNet 40-emotion GPU worker
β”‚   β”œβ”€β”€ _score_worker.py               # WER + content enjoyment GPU worker
β”‚   β”œβ”€β”€ _lavasr_worker.py              # LavaSR BWE GPU worker
β”‚   └── _lavasr_clap_worker.py         # VoiceCLAP scoring GPU worker
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ voicenet_taxonomy.md           # VoiceNet 57-dim taxonomy
β”‚   β”œβ”€β”€ voicenet_extension_taxonomy.html  # Interactive VoiceNet viewer
β”‚   β”œβ”€β”€ emonet_taxonomy.md             # EmoNet 40 emotions
β”‚   β”œβ”€β”€ vocal_bursts_taxonomy.md       # 120 vocal bursts
β”‚   β”œβ”€β”€ archetypes.md                  # 920 archetypes
β”‚   β”œβ”€β”€ acting_challenges_preview.html # Acting challenge preview (100 samples)
β”‚   β”œβ”€β”€ paper_reference.md             # Citation and BibTeX
β”‚   β”œβ”€β”€ path_a_voicenet.md             # Path A detailed docs
β”‚   β”œβ”€β”€ path_b_archetype.md            # Path B detailed docs
β”‚   β”œβ”€β”€ path_c_archetype_named.md      # Path C detailed docs
β”‚   β”œβ”€β”€ path_d_reference.md            # Path D detailed docs
β”‚   β”œβ”€β”€ path_ac_acting_challenge.md    # AC + ACCC detailed docs
β”‚   β”œβ”€β”€ path_sit_situation.md          # SIT + SIT-CC situation pathway docs
β”‚   β”œβ”€β”€ path_cc_character_consistent.md   # CC v1 detailed docs
β”‚   β”œβ”€β”€ path_cc2_character_consistent_v2.md  # CC2 v2 detailed docs
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_examples.md        # CC-A English examples
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_examples.md      # CC2-C English examples
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_examples.md # ACCC English examples
β”‚   β”œβ”€β”€ dramabox_sit_situation_examples.md       # SIT multilingual examples
β”‚   β”œβ”€β”€ dramabox_cca_voicenet_de_examples.md     # CC-A German examples
β”‚   β”œβ”€β”€ dramabox_cc2c_archetype_de_examples.md   # CC2-C German examples
β”‚   β”œβ”€β”€ dramabox_accc_acting_challenge_de_examples.md # ACCC German examples
β”‚   β”œβ”€β”€ dramabox_extreme_physical_examples.md    # Extreme Physical English examples
β”‚   β”œβ”€β”€ dramabox_extreme_physical_de_examples.md # Extreme Physical German examples
β”‚   └── demo/                          # HTML demo grids with embedded audio
β”‚       β”œβ”€β”€ sidon_vc_sample_groups.html # Sidon+VC experiment (20 groups, LLM splits)
β”‚       β”œβ”€β”€ accc_lavasr.html           # ACCC LavaSR index (redirects to page 1)
β”‚       β”œβ”€β”€ accc_lavasr_p1.html        # ACCC LavaSR grid pages 1-10
β”‚       β”œβ”€β”€ ...
β”‚       └── pitch_analysis.html        # Pitch analysis
└── examples/
    └── example_prompt.txt             # Sample DramaBox prompt

Hardware Requirements

ComponentMinimumRecommended
Prompt generation1 GPU, 16GB VRAM4+ GPUs, 16GB+ each
TTS synthesis1 GPU, 24GB VRAM4+ GPUs, 24GB+ each
Sidon + ChatterboxVC augmentation1 GPU, 12GB VRAM8 GPUs (parallel workers)
MOSS re-annotation1 GPU, 8GB VRAM (4-bit)8 GPUs (parallel workers)
VoiceCLAP + EmoNet scoring1 GPU, 4GB VRAM8 GPUs (parallel workers)
RAM32GB64GB+

MOSS Re-Annotation (Audio-Guided Prompt Rewriting)

After post-processing, the pipeline runs a MOSS re-annotation pass (dramabox/moss_refine.py) that closes the loop between intended and actual performance.

Concept

Original DramaBox prompts are directions β€” the TTS model interprets them, and the actual audio may differ from what was requested. MOSS-Audio-8B-Thinking listens to each generated audio clip together with the original prompt and ASR transcript, then rewrites the prompt to match what was actually performed.

Three Inference Passes Per Sample

  1. Full audio -> refined two-scene prompt matching the actual performance
  2. Part 1 audio -> standalone single-scene prompt for Scene 1
  3. Part 2 audio -> standalone single-scene prompt for Scene 2

Architecture

Original DramaBox Prompt
        +
ASR Transcript (from Whisper)
        +
Generated Audio (MP3)
        |
        v
+---------------------------+
|  MOSS-Audio-8B-Thinking   |
|  (4-bit, per-GPU worker)  |
|                           |
|  Listens to audio +       |
|  reads text context        |
|                           |
|  Rewrites prompt to       |
|  match actual performance  |
+---------------------------+
        |
        v
moss_refined_prompt_full
moss_refined_prompt_part1
moss_refined_prompt_part2

Why Re-Annotation Matters

  • Original prompts are suggestions, not guarantees
  • Audio may differ from prompt due to TTS interpretation
  • MOSS-refined prompts become ground truth for annotations
  • Enables training on what models actually do, not what we asked for

Usage

# Run MOSS re-annotation on all post-processed samples
python dramabox/moss_refine.py                    # All GPUs
python dramabox/moss_refine.py --num-gpus 4       # 4 GPUs
python dramabox/moss_refine.py --test             # First 10 samples, 1 GPU

Requires /tmp/moss_venv with transformers==4.57.1 (MOSS is incompatible with transformers >= 5.x).


License

Emotion LoRAs for MOSS-TTS (40 emotions)

We trained one LoRA adapter per EmoNet emotion for the MOSS-TTS-Local-Transformer-4.55B voice-acting model, so an emotion can be applied on top of ordinary voice cloning. Each adapter is the best of a rank {16, 32, 64} sweep: for scarce data a lower rank curbs overfitting, and the winner is picked by a combined score over emotion intensity, vocal-burst-blend, genuineness and speaker similarity.

Data (per emotion, ~1,000–1,400 clips): natural in-the-wild speech (EmoLia) is preferred and filled with the most intense LAION's Got Talent clips; ~25% of rows carry a same-voice, contrasting-emotion reference; instructions are procedural emotion captions from procedural-voice-captions.

The demo plays five neutral sentences per emotion in three languages, comparing the LoRA with and without an emotion reference; the LoRA raises the automatic EmoNet emotion score while keeping the voice and naturalness.

Contributors

Languages

Python

62.2%

HTML

37.8%