Right now src/main/pipeline/openai.ts talks to the OpenAI REST API directly, so an API key is mandatory for the two stages that cost money: Whisper transcription and LLM clip analysis. Everything else already runs locally.
Two things people keep wanting, and they share most of the work:
1. Point it at an OpenAI-compatible endpoint. A configurable base URL would cover Azure OpenAI, OpenRouter, Groq, LM Studio, Ollama's compatible shim and anything else speaking the same shape. Mostly this is threading a base URL through openai.ts plus a Settings field.
2. Local Whisper, so transcription costs nothing. whisper.cpp or faster-whisper as an optional local backend. Note that clip finding genuinely needs a capable model for the reasoning, so local transcription plus a hosted LLM is a sensible middle ground and probably the most useful first step.
The thing to be careful about: transcription needs word-level timestamps, because caption karaoke timing, tighten-cuts and the whole editor depend on them. Any backend that only returns segment-level timing will not work without extra alignment. See src/main/pipeline/transcribe.ts for the shape the rest of the app expects.
Happy to advise on where things plug in if someone wants to take this on.
Right now
src/main/pipeline/openai.tstalks to the OpenAI REST API directly, so an API key is mandatory for the two stages that cost money: Whisper transcription and LLM clip analysis. Everything else already runs locally.Two things people keep wanting, and they share most of the work:
1. Point it at an OpenAI-compatible endpoint. A configurable base URL would cover Azure OpenAI, OpenRouter, Groq, LM Studio, Ollama's compatible shim and anything else speaking the same shape. Mostly this is threading a base URL through
openai.tsplus a Settings field.2. Local Whisper, so transcription costs nothing.
whisper.cpporfaster-whisperas an optional local backend. Note that clip finding genuinely needs a capable model for the reasoning, so local transcription plus a hosted LLM is a sensible middle ground and probably the most useful first step.The thing to be careful about: transcription needs word-level timestamps, because caption karaoke timing, tighten-cuts and the whole editor depend on them. Any backend that only returns segment-level timing will not work without extra alignment. See
src/main/pipeline/transcribe.tsfor the shape the rest of the app expects.Happy to advise on where things plug in if someone wants to take this on.