← Selected work
Workflow & Systems Design

Automating
voice production

I designed a local workflow to generate voice lines in batches, with automatic file naming and organisation.

Command Prompt
Generating audio0 / 249
Batch generation demo · fictional file namesRuns locally

Actual file names and dialogue have been removed to protect company assets.

My role
Workflow design, data structure & validation
Implementation
Python script with Claude assistance
Tools
GPT-SoVITS · Python · Excel
Batch run
457 voice lines generated in ~7 minutes
01 · At a glance

A manual production task that took over my day.

The problem

Part of my job involves using GPT-SoVITS to generate dialogue for game characters. Manually producing around 150 voice lines could take a full workday. Missing a line or pasting the wrong file name could shift every file name after it. What would I do if a character had 1,000 voice lines?

What I built

I designed a workflow that uses a local Excel spreadsheet and Python script to call the voice generation model, generate audio automatically and save it to specified folders. Dialogue and file names are added and edited locally, without being uploaded to external AI services.

The result

I generated, named and saved 457 voice lines for two characters in about seven minutes. Setup took a few minutes per character to update the local paths for character models and output folders in the script. Quality checks were carried out through spot-checks and in-game testing.

02 · The original workflow

The manual workflow was difficult to scale.

After loading the character models and reference audio in the GPT-SoVITS web interface, I worked through the dialogue one line at a time: pasting the text, generating and checking the audio, then downloading and renaming the file to match its voice ID.

Original workflow: train character model, set download folder, load models and reference audio, then repeat pasting dialogue, generating, checking quality, downloading and renaming. Poor quality returns to generation; completed files lead to the next line.
This project focuses on the generation loop shown above. Character model training is a separate task.
One skipped line causes later file names to be paired with the wrong audio: voice_002.wav contains Line 003.

I renamed files manually in the order of the voice-name list. Missing a line or losing my place could shift all subsequent names.

In localisation work, the dialogue was often in a language I don’t understand, so I couldn’t match the audio to the text by listening to find where the mismatch began.

Retries, file naming and correcting mismatches added to the time spent generating audio. Producing around 150 voice lines could occupy a full working day, leaving no time for other tasks.

03 · The constraint

Build the tool without sharing the dialogue.

To protect company assets from exposure to external AI services, I kept tool development separate from the content. Claude helped implement the script and blank template, while I added the voice names and dialogue to Excel locally.

AI-assisted development produces a Python script and blank Excel template using placeholders. These are saved locally, where voice names and dialogue are entered and processed by the script and local GPT-SoVITS to generate audio files.
I ran the script on my own computer, so the entire voice generation process stayed local.
04 · The new workflow

I replaced the manual loop with a batch run

Switching to another character’s voice only takes a few minutes, with changes to a few lines in the script for the local GPT and SoVITS model paths, reference audio path and its transcript. I paste all the voice names and dialogue into the spreadsheet, start the local GPT-SoVITS service and run the script. It works through every row and saves each file under its voice name, in the folder given in that row.

Setup: train the character model once, copy the script and template, replace the model and reference audio paths and reference transcript, and start the local GPT-SoVITS service. Batch run: bulk copy and paste all names and dialogue, run the script, and automatically name and save generated audio in designated category folders.
05 · Three design decisions

Three decisions that reduced manual work

01

Keep each file name next to its dialogue

Each row of the spreadsheet holds a voice name and its dialogue, and the script names every file from its own row. I can paste both columns straight from the existing source table instead of matching names to files manually. If a line is skipped, only that one file is missing, and every file after it still has the right name.

02

Let each row set its own output folder

In the original production list, two special-scene groups used the same file names. Saved into one folder, the second group would have overwritten the first. I added an Output folder column so each group is saved in its own directory, and every row now defines both the file name and where it goes.

03

Validate quality during in-game testing

The original workflow required me to listen to each generated line before saving it. Most lines were fine on the first attempt, but I still had to finish listening to every one before moving on, which made production slow.

Now I generate the full batch first and check how the voices sound when implemented on the game’s test server. I record the IDs of any problem lines and regenerate only those files. Checking the audio during game testing removes the separate listening step from production and saves a substantial amount of time.

06 · Results & validation

Producing the same 457 voice lines

Estimated manual production takes around three working days for 457 voice lines, compared with about seven minutes of batch generation. Each square represents seven minutes.
Manual estimate includes per-line quality checks, downloading and naming. Batch time covers generation, automatic naming and saving; setup and quality checks are excluded.

What I checked

I spot-checked more than 20 generated files for voice quality and alignment between file names and dialogue. All sampled files met the quality requirements and matched the intended dialogue.

I integrated all voice lines into the game and tested their in-game performance on the test server, recording the IDs of lines that needed improvement and regenerating them individually.

07 · Team handoff

A reusable voice production workflow

I packaged the script, blank Excel template and setup guide into a reusable workflow, uploaded it to GitHub and shared it with my colleagues. Our team can use this workflow for all future voice generation tasks.

View the script and setup guide on GitHub ↗