Project Files
schemas / formatting.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://primary-data.dev/schemas/vibevoice-tts/formatting.json",
"title": "VibeVoice TTS Format Options",
"description": "Describes the formatting options accepted by the vibevoice-tts format tool. These options control text cleaning, multi-speaker script formatting, and voice/emotion annotations for VibeVoice TTS. VibeVoice does NOT support SSML — output is plain text in script format.",
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "The input text to format for VibeVoice TTS. Supports plain text, 'Speaker N:' prefix format for multi-speaker, or a JSON array of {speaker, text} objects.",
"minLength": 1
},
"mode": {
"type": "string",
"description": "Speaker mode: 'single' (one speaker), 'multi' (parse Speaker N: prefixes), or 'auto' (detect automatically, fallback to single).",
"enum": ["single", "multi", "auto"],
"default": "auto"
},
"speakers": {
"type": "integer",
"description": "Number of speakers (1-4). Used for voice/emotion array indexing.",
"minimum": 1,
"maximum": 4,
"default": 1
},
"voices": {
"type": "array",
"description": "Voice names per speaker, e.g. ['Alice', 'Frank']. Used as documentation for voice reference selection — the user picks matching audio samples for each VibeVoice speaker slot.",
"items": {
"type": "string"
}
},
"emotions": {
"type": "array",
"description": "Emotion labels per speaker for voice reference selection. VibeVoice does NOT support inline emotion tags — emotion comes from the reference audio sample selected for each speaker slot.",
"items": {
"type": "string",
"enum": [
"neutral",
"happy",
"sad",
"angry",
"excited",
"calm",
"thoughtful",
"whisper",
"serious",
"energetic",
"warm",
"cold",
"mysterious",
"dramatic"
]
}
},
"clean": {
"type": "boolean",
"description": "Apply VibeVoice text-cleaning pipeline. Strips smart quotes, Chinese quotation marks, emoji, HTML/XML tags, URLs, non-speech annotations, tabs, and excess whitespace.",
"default": true
},
"output": {
"type": "string",
"description": "Output format: 'plain' (just cleaned text), 'script' (Speaker N: prefix format suitable for VibeVoice), or 'json' (structured array of {speaker, text} objects).",
"enum": ["plain", "script", "json"],
"default": "script"
}
},
"required": ["text"],
"additionalProperties": false
}