Devon own stem/track/channel, per-category LLM routing, settings UI cleanup
Audio: - Devon gets own stem, Reaper track (Input 17), and configurable channel - play_caller_audio accepts stem_name + channel_override params - Reaper script checks 4 voice tracks (Host, Devon, Live Caller, AI Caller) - postprod.py includes devon stem in gap detection Cost optimization: - Per-category model routing: Sonnet for caller dialog, Gemini Flash for everything else - Estimated 65% cost reduction ($4.32 → ~$1.50/show) - Category models configurable from settings UI Frontend: - Settings panel: clean routing grid for output channels, model routing grid for LLM categories - Devon channel added to audio routing - Share icon SVG fill fix (currentColor) - Website homepage iterations Publishing: - Revert Castopod API workaround (API re-enabled) - Fix container media path Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+61
-35
@@ -195,7 +195,7 @@
|
||||
|
||||
<!-- Audio Devices -->
|
||||
<div class="settings-group">
|
||||
<h3>Audio Routing</h3>
|
||||
<h3>Audio Devices</h3>
|
||||
<div class="device-row">
|
||||
<label>
|
||||
Input Device
|
||||
@@ -203,7 +203,7 @@
|
||||
</label>
|
||||
<label>
|
||||
Ch
|
||||
<input type="number" id="input-channel" value="1" min="1" max="16" class="channel-input">
|
||||
<input type="number" id="input-channel" value="1" min="1" max="32" class="channel-input">
|
||||
</label>
|
||||
</div>
|
||||
<div class="device-row">
|
||||
@@ -212,44 +212,70 @@
|
||||
<select id="output-device"></select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="channel-row">
|
||||
<label>Caller Ch <input type="number" id="caller-channel" value="3" min="1" max="16" class="channel-input"></label>
|
||||
<label>Live Ch <input type="number" id="live-caller-channel" value="9" min="1" max="16" class="channel-input"></label>
|
||||
<label>Music Ch <input type="number" id="music-channel" value="5" min="1" max="16" class="channel-input"></label>
|
||||
<label>SFX Ch <input type="number" id="sfx-channel" value="7" min="1" max="16" class="channel-input"></label>
|
||||
<label>Ad Ch <input type="number" id="ad-channel" value="11" min="1" max="16" class="channel-input"></label>
|
||||
<label>Ident Ch <input type="number" id="ident-channel" value="15" min="1" max="16" class="channel-input"></label>
|
||||
</div>
|
||||
|
||||
<div class="settings-group">
|
||||
<h3>Output Routing</h3>
|
||||
<div class="routing-grid">
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">AI Caller</span>
|
||||
<input type="number" id="caller-channel" value="3" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">Devon</span>
|
||||
<input type="number" id="devon-channel" value="17" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">Live Caller</span>
|
||||
<input type="number" id="live-caller-channel" value="9" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">Music</span>
|
||||
<input type="number" id="music-channel" value="5" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">SFX</span>
|
||||
<input type="number" id="sfx-channel" value="7" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">Ads</span>
|
||||
<input type="number" id="ad-channel" value="11" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
<div class="routing-item">
|
||||
<span class="routing-label">Idents</span>
|
||||
<input type="number" id="ident-channel" value="15" min="1" max="32" class="channel-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- LLM Settings -->
|
||||
<div class="settings-group">
|
||||
<h3>LLM Provider</h3>
|
||||
<label>
|
||||
Provider
|
||||
<select id="provider">
|
||||
<option value="openrouter">OpenRouter</option>
|
||||
<option value="ollama">Ollama</option>
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<div id="openrouter-settings">
|
||||
<label>
|
||||
Model
|
||||
<select id="openrouter-model"></select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="ollama-settings" class="hidden">
|
||||
<label>
|
||||
Model
|
||||
<select id="ollama-model"></select>
|
||||
</label>
|
||||
<label>
|
||||
Host
|
||||
<input type="text" id="ollama-host" value="http://localhost:11434">
|
||||
</label>
|
||||
<button type="button" id="refresh-ollama" class="refresh-btn">Refresh Models</button>
|
||||
<h3>LLM Model Routing</h3>
|
||||
<div class="model-routing-grid">
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">Caller Dialog</span>
|
||||
<select id="model-caller_dialog" class="model-select"></select>
|
||||
</div>
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">Devon Monitor</span>
|
||||
<select id="model-devon_monitor" class="model-select"></select>
|
||||
</div>
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">Devon Ask</span>
|
||||
<select id="model-devon_ask" class="model-select"></select>
|
||||
</div>
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">Backgrounds</span>
|
||||
<select id="model-background_gen" class="model-select"></select>
|
||||
</div>
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">Call Summary</span>
|
||||
<select id="model-call_summary" class="model-select"></select>
|
||||
</div>
|
||||
<div class="model-routing-item">
|
||||
<span class="model-routing-label">News</span>
|
||||
<select id="model-news_summary" class="model-select"></select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user