Nodes/TTS Audio Suite/๐Ÿงพ MOSS Dataset Rows
ComfyUI Node

๐Ÿงพ MOSS Dataset Rows

Pair each training clip with its transcript and conditioning

By diodiogodยทCreated about a year agoยทUpdated 22 days agoยท 1,098
๐Ÿงพ MOSS Dataset Rows
  • clip_dataset
  • manifest_path
  • manifest_info
โ—„manifest_namemoss_train.jsonlโ–บ
โ—„text_linesHello there, this is a training sample. How are you today?โ–บ
โ—„reference_clip_linesโ–บ
โ—„language_linesโ–บ
โ—„instruction_linesโ–บ
โ—„quality_linesโ–บ
โ—„sound_event_linesโ–บ
โ—„ambient_sound_linesโ–บ
โ—„duration_tokens_linesโ–บ
โ—„default_languageโ–บ
โ—„default_instructionโ–บ
โ—„default_qualityโ–บ
โ—„default_sound_eventโ–บ
โ—„default_ambient_soundโ–บ
โ—„default_duration_tokens0โ–บ
โ—„output_subdirtts_audio_suite_training/moss_tts/manifestsโ–บ
โ—„overwritetrueโ–บ

Staging got your audio clips onto disk. But a TTS model can't learn a voice from audio alone - it needs to know what's being said in each clip. This node builds that bridge. It writes a training manifest (a .jsonl file, one row per clip) that lines up each staged clip with its transcript and any extra conditioning MOSS supports. Rows in, manifest out.

This is the least glamorous and most important step in the MOSS training chain, because if your text doesn't match your audio, the whole training run learns garbage. Slow down here.

How it works

You hand it the MOSS_CLIP_DATASET from Clip Staging and a block of text - one line of transcript per clip, in order. It zips them together: clip 1 gets text line 1, clip 2 gets line 2, and so on. It writes the result as a JSONL manifest under the training folder, which Dataset Prep then reads. The extra optional fields let you attach MOSS's prompt conditioning (language, style instruction, quality, sound events) per line or as a default across all rows.

The inputs and outputs that matter

  • clip_dataset (MOSS_CLIP_DATASET) - the output of Clip Staging. Required.
  • text_lines (STRING, multiline) - the transcripts, one line per clip, in the same order the clips were staged. This alignment is everything. A mismatch here is the single most common way MOSS training goes wrong.
  • manifest_name (default moss_train.jsonl) - the filename for the manifest.
  • The *_lines fields (reference_clip_lines, language_lines, instruction_lines, quality_lines, sound_event_lines, ambient_sound_lines, duration_tokens_lines) - optional per-clip conditioning, again one line per clip. These map to MOSS's official prompt fields. Most beginners leave them blank.
  • The default_* fields - instead of repeating the same value on every line, set it once as a default (e.g. default_language, default_instruction). Handy when your whole dataset is one language or one speaking style.

Outputs: manifest_path (STRING) - the path to the JSONL, which the prep step points at - and manifest_info (STRING), a summary you should read to confirm the row count matches your clip count.

How to install it

Ships with TTS Audio Suite. ComfyUI Manager: search TTS Audio Suite, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/diodiogod/TTS-Audio-Suite.git
cd TTS-Audio-Suite
python install.py

then restart. On Linux, install portaudio19-dev and libsamplerate0-dev first. This node just writes a text manifest - no model download of its own.

Common issues & troubleshooting

Clip and text counts don't match. This is the classic failure. If you staged 40 clips, you need 40 lines in text_lines. Check manifest_info - if it reports fewer rows than clips (or vice versa), the alignment is off and training will learn wrong labels. Fix the line count before proceeding.

Transcripts are approximate. Loose transcripts hurt. TTS training wants text that actually matches the words in the clip; paraphrases and dropped words degrade the result. Transcribe carefully (the suite's ASR nodes can help, but proofread the output).

Order got scrambled. The pairing is positional - line N goes with clip N. If your clips staged in an order you didn't expect, the text will bind to the wrong audio. Keep your source clip ordering deliberate.

Do I need the conditioning fields? No. For a straightforward single-speaker voice, text_lines alone is enough. The language/instruction/quality fields are there for when you want finer control over what the adapter learns, not a requirement.

CategoryTTS Audio Suite/๐ŸŽ“ Training

Inputs (18)

NameTypeDefaultDescription
clip_datasetMOSS_CLIP_DATASETStaged clip dataset from MOSS Clip Staging.
manifest_nameSTRINGmoss_train.jsonlOutput manifest filename. .jsonl will be appended if missing.
text_linesSTRINGHello there, this is a training sample. How are you today?Exactly one line per staged clip, in clip order. Each line is the transcription/text for that clip's target audio. Simple training: just give each clip its own transcript here. Example: clip001 audio says 'Hello there' -> line 1 should be 'Hello there'.
reference_clip_linesoptSTRINGOptional one line per staged clip. Most single-speaker or fixed-voice LoRAs should leave this blank. Use this only if a training row should also include reference audio for voice/style conditioning. That means: text says what to say, target clip is the correct output, and reference clip says whose voice/style to follow. Leave blank for normal audio+transcript training. Each line may be blank, a single clip id like clip001, a 1-based clip number like 1, or a comma-separated list such as clip001,clip002. Example: line 2 = clip001 means clip002 trains as: text from line 2 + reference voice from clip001 -> target audio clip002. Single reference -> ref_audio. Multiple references -> reference_audio.
language_linesoptSTRINGOptional one line per clip. Blank line uses default_language or no language field.
instruction_linesoptSTRINGOptional one line per clip. Blank line uses default_instruction. Use this for explicit labels such as 'speaking angrily', 'whispering', or 'calm narration'. Do not use this for recording/presentation labels like 'telephone call quality'; those belong in quality_lines. For many style-focused datasets, this is easier and clearer than using reference_clip_lines.
quality_linesoptSTRINGOptional one line per clip. Blank line uses default_quality. Use this for recording/presentation labels such as 'telephone call quality', 'studio recording', or similar audio-quality descriptors.
sound_event_linesoptSTRINGOptional one line per clip. Blank line uses default_sound_event.
ambient_sound_linesoptSTRINGOptional one line per clip. Blank line uses default_ambient_sound.
duration_tokens_linesoptSTRINGOptional one line per clip. Blank line uses default_duration_tokens.
default_languageoptSTRINGOptional shared language fallback for rows whose language_lines entry is blank.
default_instructionoptSTRINGOptional shared instruction fallback for rows whose instruction_lines entry is blank. Useful if most rows should carry the same style label, for example 'speaking angrily'.
default_qualityoptSTRINGOptional shared quality fallback. Useful if most rows share the same recording/presentation quality label, for example 'telephone call quality'.
default_sound_eventoptSTRINGOptional shared sound_event fallback.
default_ambient_soundoptSTRINGOptional shared ambient_sound fallback.
default_duration_tokensoptINT00โ€“8192Optional shared tokens fallback. 0 disables it.
output_subdiroptSTRINGtts_audio_suite_training/moss_tts/manifestsSubdirectory inside ComfyUI input/ where the generated manifest file will be written.
overwriteoptBOOLEANtrueOverwrite the existing manifest file if it already exists.

Outputs (2)

NameTypeDescription
manifest_pathSTRINGโ€”
manifest_infoSTRINGโ€”