Skip to content

Script CSV format

When you upload a script alongside your audio, VoiceQC reads it as a two-column CSV: one row per audio file, listing the filename and the line the actor was supposed to deliver. The Mismatch rule uses this to flag takes that don’t match.

filename,script_text
hero-line-001.wav,"This is the line the actor was supposed to deliver."
hero-line-002.wav,"I'll be back."
hero-line-003.wav,"Line that spans
multiple lines, wrapped in quotes."

Two columns, in this order:

ColumnRequiredNotes
FilenameYesMust match the uploaded audio filename. Extension (.wav) is recommended but optional.
Script textYesThe line. Wrap in double quotes if it contains commas, line breaks, or quotes.

The first line is treated as a header if it contains both the words filename and script (case-insensitive). Otherwise it’s read as data.

These are both valid:

filename,script_text
audio1.wav,"This is the line."
audio1.wav,"This is the line."
audio2.wav,"Another line."

Standard RFC 4180 CSV quoting:

  • Wrap in double quotes if the cell contains a comma, a newline, or a double quote: "Hello, there!".
  • Escape an internal double quote by doubling it: "She said ""no"" twice.".
  • Multi-line scripts work — keep the opening quote on the first line and the closing quote on the last:
audio1.wav,"Line one of the speech.
Line two of the speech.
Line three."

The parser reads forward until it finds the closing quote.

VoiceQC matches CSV rows to Session items by filename. A few practical points:

  • Extensions are recommended. audio1.wav matches a file uploaded as audio1.wav. Plain audio1 works too but is less specific — if you have files at different paths with the same stem, you’ll get unexpected matches.
  • Filename sanitization applies on the audio side. If your audio file has special characters (< > : " / \ | ? *) they’re replaced with underscores at upload time. Your CSV needs the sanitized name. The simplest fix: don’t put special characters in audio filenames in the first place.
  • Order doesn’t matter — you can upload the script before or after the audio. Mismatched rows are stored and applied as soon as a matching item arrives.

The parser is forgiving in some ways and strict in others:

  • Empty rows are skipped silently. Trailing blank rows (common when Excel exports a sheet) are detected and ignored.
  • Rows with fewer than two columns are surfaced as parse errors with the line number and a snippet of the offending content.
  • Rows where the filename is empty are rejected with FileName is empty.
  • Rows where the script text is empty are rejected with Script text is empty.
  • Rows with parse errors before the last valid row are surfaced as real errors. Anything after the last valid row is treated as trailing garbage (Excel artifact) and silently ignored.
PropertyValue
Extension.csv (the upload zone accepts .csv and text/csv MIME)
EncodingUTF-8 (FileReader.readAsText() defaults to UTF-8; non-UTF-8 files may garble non-ASCII characters)
Line endings\n or \r\n — both work
Maximum sizeNo surfaced limit today; reasonable scripts are well under 1 MB