commit b99a8df4e599df4eea3dde77b23367f3d08c9c26 Author: Trulla Date: Fri Sep 25 14:13:34 2026 +0200 Initial: VoiceStudio A/B-Test-Stack (isoliert, gegen chatterbox-tts auf node2) diff --git a/.env.enc b/.env.enc new file mode 100644 index 0000000..aed8613 --- /dev/null +++ b/.env.enc @@ -0,0 +1,7 @@ +OMNIVOICE_API_KEY=ENC[AES256_GCM,data:IJjs/ZWwaByfKyuRtqmrX2OqouifYw/yhNalQRYG/OsjNIxFUXsoXaG9Rw==,iv:N6oCFvwBZXnyvgpkNt5PFqLNqXRi89PcRGMdpJh4vOg=,tag:ouDJk5rqHd4vQhcfheTrnw==,type:str] +sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0emkrckowMEpvcFYvQ0hB\nQlJ3d3N6VkV3R0oxRHNuR0RxRXc0L0xwdEI0ClRHQ0RRbkNGVUoxR09JM0pwM2hZ\nSXl4c2R4bjZFbHp6Mko3ckZIZ3B3YzQKLS0tIFNSaFVyQzNZd1NYcUdPbHRpWGNu\nWUgwR1dDcGxwdHJpaThlUDI1NGZlYmMKaTO2fGkbCJgJyi3T3Cf2baFQYHsPuw1H\nPE1sI0+O0c3anJlw5oSXiz/+1CSWeS12rQ4wGbZhXyjBZULFEhKo/A==\n-----END AGE ENCRYPTED FILE-----\n +sops_age__list_0__map_recipient=age1z8gak2l4h0vpcnhtcdxmem2u9h2n54vuksk8ys82609qtzampuvqh50wdr +sops_lastmodified=2026-09-25T12:13:34Z +sops_mac=ENC[AES256_GCM,data:Tq90AeGPT4fttY4/ixtRUEn1Q748AZk7Ud/SKbVYC2uvdpf/BulohSQIuMDRqaqBnadOEKWOHyiz+upx6bLKkxV8VWgtadhGJL7O/yzAbQSY9mGJGmhWaeXrF13APYSIq4t1RTC3iVkfuiEhyF5uUv0udUx+YCZe0IzVugMWyz4=,iv:sLCHI0NuwNFE6rblIy6uTtcu5iON8ejUtpKBubLA93c=,tag:J7lUw2C2z6XrCEoxND8Kgg==,type:str] +sops_unencrypted_suffix=_unencrypted +sops_version=3.12.2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..42b1db6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Secrets - nur verschlüsselt committen +.env +.env.* +!.env.enc +!.env.*.enc diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..672e10e --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,3 @@ +creation_rules: + - path_regex: \.env.*$ + age: "age1z8gak2l4h0vpcnhtcdxmem2u9h2n54vuksk8ys82609qtzampuvqh50wdr" diff --git a/README.md b/README.md new file mode 100644 index 0000000..765efc5 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# VoiceStudio (A/B-Test gegen Chatterbox) + +Isolierter Test-Stack, komplett getrennt von `tdarr`/`chatterbox-tts` (kein +gemeinsamer Container-Name, kein gemeinsames /app-config/). + +- **Repo:** eigenständig, NICHT Teil des tdarr-Stacks +- **Node:** node2 (10.2.1.104) — GPU-Sharing mit chatterbox-tts/fileflows/tdarr, + daher A/B statt Parallelbetrieb unter Last empfohlen +- **Port:** 3900 (Web-UI im Browser, kein Electron nötig) +- **Volumes:** ausschließlich unter `/app-config/voicestudio/` +- **Deploy:** über Dockhand Git-Stack-Resync (env=6, node2), NICHT `docker run` + +## Setup + +1. `.env` aus `.env.enc` entschlüsseln: `sops -d .env.enc > .env` +2. Dockhand: Git-Stack für dieses Repo unter env=6 registrieren +3. Sync auslösen, Container startet, erster Start lädt ~2.4GB Modelle +4. Web-UI: `http://10.2.1.104:3900` — API-Key aus `.env` beim ersten Login eingeben + +## Vergleich mit Chatterbox + +Referenzstimme `deep_thought.mp3` in beiden Systemen testen, Ergebnis +subjektiv/objektiv vergleichen bevor Chatterbox ersetzt wird. Chatterbox +bleibt bis auf Weiteres produktiv (Butler-Route `/tts/speak` zeigt weiter +auf 10.2.1.104:8004). diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..5348840 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,26 @@ +services: + voicestudio: + image: ghcr.io/debpalash/omnivoice-studio:latest + container_name: voicestudio + restart: unless-stopped + ports: + - "3900:3900" + environment: + - OMNIVOICE_API_KEY=${OMNIVOICE_API_KEY} + - OMNIVOICE_SERVER_MODE=1 + - TZ=Europe/Berlin + - NVIDIA_VISIBLE_DEVICES=all + - NVIDIA_DRIVER_CAPABILITIES=all + volumes: + - /app-config/voicestudio/data:/app/omnivoice_data + - /app-config/voicestudio/hf_cache:/root/.cache/huggingface + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + labels: + - "dockhand.stack=voicestudio" + - "dockhand.service=voicestudio"