Update TTS providers and story markup

This commit is contained in:
2026-05-20 22:13:31 +02:00
parent b911c40d89
commit 8258ea2321
36 changed files with 1482 additions and 197 deletions
+48
View File
@@ -19,6 +19,8 @@ class MarkupParserModule extends BaseModule {
'parseParagraph',
'parseInline',
'extractGlossaryTags',
'extractTtsInstructionTags',
'normalizeTtsInstructionProvider',
'parseImageOptions',
'parseSfxOptions',
'parseMusicOptions',
@@ -243,6 +245,52 @@ class MarkupParserModule extends BaseModule {
.sort((a, b) => b.term.length - a.term.length);
}
extractTtsInstructionTags(tags = []) {
if (!Array.isArray(tags)) return [];
return tags
.map(tag => {
const key = String(tag?.key || '').toLowerCase();
const value = String(tag?.value || '').trim();
const param = String(tag?.param || '').trim();
if (key === 'tts') {
if (param) {
return {
provider: this.normalizeTtsInstructionProvider(value),
instruction: param
};
}
return {
provider: null,
instruction: value
};
}
if (key.startsWith('tts-') && value) {
return {
provider: this.normalizeTtsInstructionProvider(key.slice(4)),
instruction: value
};
}
return null;
})
.filter(entry => entry && entry.instruction);
}
normalizeTtsInstructionProvider(provider) {
const normalized = String(provider || '').trim().toLowerCase();
if (!normalized) return null;
if (normalized === 'openai' || normalized === 'openai-tts') return 'openai-tts';
if (normalized === 'local-openai' || normalized === 'local-openai-tts') return 'local-openai-tts';
if (normalized === 'elevenlabs' || normalized === 'elevenlabs-tts') return 'elevenlabs-tts';
if (normalized === 'kokoro' || normalized === 'kokoro-tts') return 'kokoro-tts';
if (normalized === 'browser' || normalized === 'browser-tts') return 'browser-tts';
return normalized;
}
smartypants(text) {
const result = String(text)
.replace(/---/g, '\u2014')