fix(launcher): remove youtube subtitle mode

This commit is contained in:
2026-03-08 16:03:24 -07:00
parent 6a44b54b51
commit a6ece5388a
19 changed files with 714 additions and 202 deletions

View File

@@ -2,7 +2,7 @@ import { ResolvedConfig } from '../../types';
export const INTEGRATIONS_DEFAULT_CONFIG: Pick<
ResolvedConfig,
'ankiConnect' | 'jimaku' | 'anilist' | 'jellyfin' | 'discordPresence' | 'youtubeSubgen'
'ankiConnect' | 'jimaku' | 'anilist' | 'jellyfin' | 'discordPresence' | 'ai' | 'youtubeSubgen'
> = {
ankiConnect: {
enabled: false,
@@ -24,13 +24,8 @@ export const INTEGRATIONS_DEFAULT_CONFIG: Pick<
},
ai: {
enabled: false,
alwaysUseAiTranslation: false,
apiKey: '',
model: 'openai/gpt-4o-mini',
baseUrl: 'https://openrouter.ai/api',
targetLanguage: 'English',
systemPrompt:
'You are a translation engine. Return only the translated text with no explanations.',
model: '',
systemPrompt: '',
},
media: {
generateAudio: true,
@@ -122,10 +117,26 @@ export const INTEGRATIONS_DEFAULT_CONFIG: Pick<
updateIntervalMs: 3_000,
debounceMs: 750,
},
ai: {
enabled: false,
apiKey: '',
apiKeyCommand: '',
model: 'openai/gpt-4o-mini',
baseUrl: 'https://openrouter.ai/api',
systemPrompt:
'You are a translation engine. Return only the translated text with no explanations.',
requestTimeoutMs: 15_000,
},
youtubeSubgen: {
mode: 'automatic',
whisperBin: '',
whisperModel: '',
whisperVadModel: '',
whisperThreads: 4,
fixWithAi: false,
ai: {
model: '',
systemPrompt: '',
},
primarySubLanguages: ['ja', 'jpn'],
},
};

View File

@@ -51,6 +51,24 @@ export function buildIntegrationConfigOptionRegistry(
description:
'Tags to add to cards mined or updated by SubMiner. Provide an empty array to disable automatic tagging.',
},
{
path: 'ankiConnect.ai.enabled',
kind: 'boolean',
defaultValue: defaultConfig.ankiConnect.ai.enabled,
description: 'Enable AI provider usage for Anki translation/enrichment flows.',
},
{
path: 'ankiConnect.ai.model',
kind: 'string',
defaultValue: defaultConfig.ankiConnect.ai.model,
description: 'Optional model override for Anki AI translation/enrichment flows.',
},
{
path: 'ankiConnect.ai.systemPrompt',
kind: 'string',
defaultValue: defaultConfig.ankiConnect.ai.systemPrompt,
description: 'Optional system prompt override for Anki AI translation/enrichment flows.',
},
{
path: 'ankiConnect.behavior.autoUpdateNewCards',
kind: 'boolean',
@@ -291,11 +309,34 @@ export function buildIntegrationConfigOptionRegistry(
description: 'Debounce delay used to collapse bursty presence updates.',
},
{
path: 'youtubeSubgen.mode',
kind: 'enum',
enumValues: ['automatic', 'preprocess', 'off'],
defaultValue: defaultConfig.youtubeSubgen.mode,
description: 'YouTube subtitle generation mode for the launcher script.',
path: 'ai.enabled',
kind: 'boolean',
defaultValue: defaultConfig.ai.enabled,
description: 'Enable shared OpenAI-compatible AI provider features.',
},
{
path: 'ai.apiKey',
kind: 'string',
defaultValue: defaultConfig.ai.apiKey,
description: 'Static API key for the shared OpenAI-compatible AI provider.',
},
{
path: 'ai.apiKeyCommand',
kind: 'string',
defaultValue: defaultConfig.ai.apiKeyCommand,
description: 'Shell command used to resolve the shared AI provider API key.',
},
{
path: 'ai.baseUrl',
kind: 'string',
defaultValue: defaultConfig.ai.baseUrl,
description: 'Base URL for the shared OpenAI-compatible AI provider.',
},
{
path: 'ai.requestTimeoutMs',
kind: 'number',
defaultValue: defaultConfig.ai.requestTimeoutMs,
description: 'Timeout in milliseconds for shared AI provider requests.',
},
{
path: 'youtubeSubgen.whisperBin',
@@ -309,6 +350,36 @@ export function buildIntegrationConfigOptionRegistry(
defaultValue: defaultConfig.youtubeSubgen.whisperModel,
description: 'Path to whisper model used for fallback transcription.',
},
{
path: 'youtubeSubgen.whisperVadModel',
kind: 'string',
defaultValue: defaultConfig.youtubeSubgen.whisperVadModel,
description: 'Path to optional whisper VAD model used for subtitle generation.',
},
{
path: 'youtubeSubgen.whisperThreads',
kind: 'number',
defaultValue: defaultConfig.youtubeSubgen.whisperThreads,
description: 'Thread count passed to whisper.cpp subtitle generation runs.',
},
{
path: 'youtubeSubgen.fixWithAi',
kind: 'boolean',
defaultValue: defaultConfig.youtubeSubgen.fixWithAi,
description: 'Use shared AI provider to post-process whisper-generated YouTube subtitles.',
},
{
path: 'youtubeSubgen.ai.model',
kind: 'string',
defaultValue: defaultConfig.youtubeSubgen.ai.model,
description: 'Optional model override for YouTube subtitle AI post-processing.',
},
{
path: 'youtubeSubgen.ai.systemPrompt',
kind: 'string',
defaultValue: defaultConfig.youtubeSubgen.ai.systemPrompt,
description: 'Optional system prompt override for YouTube subtitle AI post-processing.',
},
{
path: 'youtubeSubgen.primarySubLanguages',
kind: 'string',

View File

@@ -91,11 +91,19 @@ const SUBTITLE_TEMPLATE_SECTIONS: ConfigTemplateSection[] = [
];
const INTEGRATION_TEMPLATE_SECTIONS: ConfigTemplateSection[] = [
{
title: 'Shared AI Provider',
description: [
'Canonical OpenAI-compatible provider transport settings shared by Anki and YouTube subtitle fixing.',
],
key: 'ai',
},
{
title: 'AnkiConnect Integration',
description: ['Automatic Anki updates and media generation options.'],
notes: [
'Hot-reload: AI translation settings update live while SubMiner is running.',
'Hot-reload: ankiConnect.ai.enabled updates live while SubMiner is running.',
'Shared AI provider transport settings are read from top-level ai and typically require restart.',
'Most other AnkiConnect settings still require restart.',
],
key: 'ankiConnect',
@@ -107,7 +115,7 @@ const INTEGRATION_TEMPLATE_SECTIONS: ConfigTemplateSection[] = [
},
{
title: 'YouTube Subtitle Generation',
description: ['Defaults for subminer YouTube subtitle extraction/transcription mode.'],
description: ['Defaults for SubMiner YouTube subtitle generation.'],
key: 'youtubeSubgen',
},
{