tts-voice-creator-clone-and.../static/sections/s-connect.html
mARTin-B78 d99395480a Add Script Rehearser; clean Connect Apps; About changelog; rework Try It Out
## Script Rehearser (new feature)
- New section s-rehearser.html + rehearser.js + nav/loader wiring
- Phase 1: paste/upload script (.txt), auto-detect characters from
  'CHARACTER: dialog' or ALL-CAPS screenplay format
- Phase 2: assign a TTS voice per character, or mark 'I play this'
- Phase 3: step-through rehearsal — synthesizes other characters via TTS,
  shows level-meter + oscilloscope for your own lines, records them from mic
- Phase 4: session summary with per-line audio playback + download

## Connect Apps
- Removed duplicate standalone MCP/speak/hotkey full-width cards
- Kept the integration-grid cards (they use the real server URL from JS)
- Added Global Hotkey Daemon as a proper integration card with snippet-hotkey
  populated by integrations.js (uses proxyBase URL dynamically)

## About page
- GET /api/changelog endpoint reads CHANGELOG.md and returns it as text
- Collapsible 'Changelog' <details> card fetches and displays it lazily

## Try It Out
- Reorganised into three cards: Voice & backend / Text to synthesize / Generate
- Backend help panel moved below the voice row (not in the same flex row)
- Style instruction field gains a dynamic badge ('style-aware ✓' / 'weak style')
  and a yellow warning when a non-style-aware backend is selected while the
  field is filled — wired to both backend-select change and input events

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 20:09:59 +02:00

94 lines
6.8 KiB
HTML

<div class="section-head">
<span class="section-icon"><span class="mdi mdi-api"></span></span>
<div class="section-title">
<h2>Connect Your Apps</h2>
<p>Ready-made snippets for SillyTavern, Open WebUI, Home Assistant, Claude Code MCP, /speak REST, hotkey daemon, and more.</p>
</div>
</div>
<div class="tab-content" id="tab-integrations">
<div class="card">
<h2>Use voices in other apps</h2>
<p class="card-subtitle">External apps connect to the Creator proxy or a reachable TTS backend and use any active voice name.</p>
<div class="integration-toolbar">
<button class="btn-primary" id="show-api-btn" type="button">show api</button>
<button class="btn-secondary" id="integration-refresh-btn">Refresh examples</button>
<button class="btn-secondary" id="copy-active-voices-btn-integrations">Copy active voices</button>
<span id="integration-url-label" class="note"></span>
</div>
</div>
<div class="integration-grid">
<!-- App integrations -->
<div class="integration-card" data-favicon="https://www.google.com/s2/favicons?domain=sillytavern.app&sz=16">
<h3>SillyTavern</h3>
<p>Use an OpenAI-compatible TTS provider. Paste one active voice into the voice field, or paste the comma-separated list where SillyTavern accepts custom voices.</p>
<pre><code id="snippet-sillytavern"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-sillytavern">Copy SillyTavern sample</button>
</div>
<div class="integration-card" data-favicon="https://www.google.com/s2/favicons?domain=openwebui.com&sz=16">
<h3>Open WebUI</h3>
<p>Enable TTS in Open WebUI under <strong>Settings → Audio</strong>. Set API base URL to this app's proxy and pick any active voice name. STT also works via the same proxy.</p>
<pre><code id="snippet-open-webui"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-open-webui">Copy Open WebUI config</button>
</div>
<div class="integration-card" data-favicon="https://www.google.com/s2/favicons?domain=home-assistant.io&sz=16">
<h3>Home Assistant</h3>
<p>Use this as a REST example for automations or scripts that call the TTS backend. Save the returned audio somewhere Home Assistant can play from.</p>
<pre><code id="snippet-home-assistant"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-home-assistant">Copy Home Assistant sample</button>
</div>
<div class="integration-card" data-icon="mdi mdi-console-line">
<h3>Generic curl test</h3>
<p>Quick terminal test for the voice list and speech endpoint after restarting the TTS container.</p>
<pre><code id="snippet-curl"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-curl">Copy curl sample</button>
</div>
<div class="integration-card" data-icon="mdi mdi-palette-outline">
<h3>VoiceDesign virtual voices</h3>
<p>Use saved Voice Design prompt presets without exporting WAVs. Point the external app at this creator app as an OpenAI-compatible TTS proxy and select a <code>vd_...</code> voice.</p>
<pre><code id="snippet-voice-design-proxy"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-voice-design-proxy">Copy virtual voice sample</button>
</div>
<!-- Developer / agent integrations -->
<div class="integration-card integration-card-wide" data-favicon="https://www.google.com/s2/favicons?domain=anthropic.com&sz=16">
<h3><span class="mdi mdi-robot-outline"></span> MCP — built-in server</h3>
<p>The app ships a built-in MCP server at <code>/mcp</code> (Streamable HTTP, JSON-RPC 2.0). No extra packages needed. Tools: <strong>speak</strong>, <strong>transcribe</strong>, <strong>list_captures</strong>, <strong>list_profiles</strong>.</p>
<pre><code id="snippet-mcp-claude-cmd"></code></pre>
<div class="btn-row" style="gap:8px;flex-wrap:wrap;margin-top:8px">
<button class="btn-secondary copy-snippet" data-snippet="snippet-mcp-claude-cmd">Copy Claude Code one-liner</button>
<button class="btn-secondary copy-snippet" data-snippet="snippet-mcp-claude-config">Copy JSON config</button>
</div>
<pre style="margin-top:10px"><code id="snippet-mcp-claude-config"></code></pre>
</div>
<div class="integration-card" data-icon="mdi mdi-bullhorn-outline">
<h3><span class="mdi mdi-bullhorn-outline"></span> /speak — direct REST</h3>
<p>POST text to <code>/speak</code> from any script or agent. Voice resolves from param → per-client binding → default. Optional persona LLM rewrite.</p>
<pre><code id="snippet-speak"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-speak">Copy /speak example</button>
</div>
<div class="integration-card" data-icon="mdi mdi-keyboard-outline">
<h3><span class="mdi mdi-keyboard-outline"></span> Global hotkey daemon</h3>
<p>Push-to-talk transcription on the host. Hold <kbd>Ctrl+Shift+Space</kbd> to record, release to transcribe and type into any window. Linux: needs <code>xdotool</code>.</p>
<pre><code id="snippet-hotkey"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-hotkey">Copy install &amp; run</button>
</div>
<div class="integration-card" data-icon="mdi mdi-waveform">
<h3>Streaming TTS</h3>
<p>Use this when the target app can play audio progressively. For routed streaming, keep response format WAV and avoid before/after route sounds, otherwise the proxy must buffer before playback.</p>
<pre><code id="snippet-streaming-howto"></code></pre>
<button class="btn-secondary copy-snippet" data-snippet="snippet-streaming-howto">Copy streaming how-to</button>
</div>
</div>
<div class="card">
<h2>Important after voice changes</h2>
<p class="card-subtitle">After enabling, hiding, adding, renaming, cropping, or normalising voices, restart the Qwen3-TTS container so its engine scans the updated <code>active_voices</code> folder. Then refresh the model or voice list in the target app.</p>
<p class="note">Virtual VoiceDesign voices use saved prompt presets through this app's proxy and do not need a WAV export or TTS-container rescan.</p>
</div>
</div><!-- /tab-integrations -->