From f13b88ab82fd59e9c848ab46de331fe2aef2ebc1 Mon Sep 17 00:00:00 2001 From: Kingston-SCYD Date: Tue, 9 Jun 2026 10:47:06 -0500 Subject: [PATCH] chore: change DECTalk port to 33001, Morshu port to 33002, add AI context file --- .ai-context.md | 52 +++++++++++++++++++++++++++++ ttstoy/dectalk-server/INSTALL.md | 10 +++--- ttstoy/dectalk-server/README.md | 8 ++--- ttstoy/dectalk-server/TESTING.md | 30 ++++++++--------- ttstoy/dectalk-server/VOICES.md | 2 +- ttstoy/dectalk-server/server.js | 2 +- ttstoy/morshu-server/server.py | 4 +-- ttstoy/ttstoy.py | 6 ++-- ttstoy/webui/app.py | 8 ++--- ttstoy/webui/templates/dectalk.html | 2 +- 10 files changed, 88 insertions(+), 36 deletions(-) create mode 100644 .ai-context.md diff --git a/.ai-context.md b/.ai-context.md new file mode 100644 index 0000000..cd7e7df --- /dev/null +++ b/.ai-context.md @@ -0,0 +1,52 @@ +# scrapyard-cogworks + +## Overview +Red-DiscordBot cog pack for Kingston's Scrapyard Discord server. Primary cog is **ttstoy** — a multi-engine TTS system with Discord integration, web UI, and Minecraft mod support. + +## Cogs + +### ttstoy +Multi-engine TTS cog with Discord slash commands, web UI, and Minecraft server integration. + +**TTS Engines:** +- `chatterbox` — AI voice synthesis via Chatterbox API (port 8099) +- `clone` — Voice cloning from reference audio +- `dectalk` — DECTalk retro TTS server (port 33001) +- `vox` — Half-Life VOX concatenative speech +- `morshu` — Morshuspeak meme TTS server (port 33002) +- `minimax` — MiniMax cloud TTS API + +**Key components:** +- `ttstoy.py` — Main cog (~150KB): Discord commands, queue system, voice management, guild config +- `webui/app.py` — Flask web UI for browser-based TTS with login system +- `dectalk-server/` — Node.js DECTalk wrapper (Express, port 33001) +- `morshu-server/server.py` — Python HTTP server for Morshuspeak (port 33002) +- `morshutalk_engine.py` — Audio concatenation engine for Morshu voice +- `vox_engine.py` — Half-Life VOX word concatenation +- `vox_words/`, `vox2_words/` — VOX audio sample packs + +**Web UI features:** +- User login via Discord token (issued by bot command `[p]ttstoy login`) +- Voice management (predefined + personal voices) +- Minecraft `/tts` integration via `/api/mc/tts` proxy endpoint +- DECTalk page with server status + +### autoroom +Auto voice channel creation/management cog (fork of PCXCogs AutoRoom). + +## Architecture +``` +Discord user → [p]ttstoy commands → ttstoy.py → Chatterbox API (port 8099) +Web UI user → webui/app.py → ttstoy.py → Chatterbox API / DECTalk (33001) / Morshu (33002) +Minecraft → mod → webui /api/mc/tts → Chatterbox API / DECTalk / Morshu +``` + +## Related Repositories +- `http://192.168.0.200:3000/kingston/chatterbox-ttstoy-api` — Chatterbox TTS API server +- `http://192.168.0.200:3000/kingston/minecraft-tts-server-mod` — NeoForge Minecraft TTS mod + +## Tech Stack +- Python 3.10+, Red-DiscordBot (discord.py) +- Flask (web UI) +- Node.js/Express (DECTalk server) +- pydub, librosa (audio processing) diff --git a/ttstoy/dectalk-server/INSTALL.md b/ttstoy/dectalk-server/INSTALL.md index ee88b34..4cea11b 100644 --- a/ttstoy/dectalk-server/INSTALL.md +++ b/ttstoy/dectalk-server/INSTALL.md @@ -22,7 +22,7 @@ The `dectalk` package provides: ## Start the Server ```bash -PORT=3001 npm start +PORT=33001 npm start ``` Or use the start script: @@ -34,10 +34,10 @@ Or use the start script: ```bash # Test health -curl http://127.0.0.1:3001/health +curl http://127.0.0.1:33001/health # Generate audio -curl "http://127.0.0.1:3001/say?text=aeiou" -o aeiou.mp3 +curl "http://127.0.0.1:33001/say?text=aeiou" -o aeiou.mp3 ffplay aeiou.mp3 ``` @@ -46,7 +46,7 @@ ffplay aeiou.mp3 In Discord: ``` [p]ttstoy mode dectalk -[p]ttstoy dectalkurl http://127.0.0.1:3001 +[p]ttstoy dectalkurl http://127.0.0.1:33001 [p]tts aeiou john madden ``` @@ -60,7 +60,7 @@ Run `npm install` in the dectalk-server directory. Use a different port: ```bash -PORT=3002 npm start +PORT=33002 npm start ``` ### Linux dependency issues diff --git a/ttstoy/dectalk-server/README.md b/ttstoy/dectalk-server/README.md index 3b9830f..0578d87 100644 --- a/ttstoy/dectalk-server/README.md +++ b/ttstoy/dectalk-server/README.md @@ -175,7 +175,7 @@ DECTalk supports special commands for controlling speech: Example: ```bash -curl "http://127.0.0.1:3001/say?text=%5B:rate%20150%5DHello%20world&voice=paul" -o test.mp3 +curl "http://127.0.0.1:33001/say?text=%5B:rate%20150%5DHello%20world&voice=paul" -o test.mp3 ``` You can also use these in Discord: @@ -212,13 +212,13 @@ DECTalk includes 9 classic voices: **Direct API:** ```bash -curl "http://127.0.0.1:3001/say?text=Hello&voice=paul" -o paul.mp3 -curl "http://127.0.0.1:3001/say?text=Hello&voice=betty" -o betty.mp3 +curl "http://127.0.0.1:33001/say?text=Hello&voice=paul" -o paul.mp3 +curl "http://127.0.0.1:33001/say?text=Hello&voice=betty" -o betty.mp3 ``` **List available voices:** ```bash -curl http://127.0.0.1:3001/voices +curl http://127.0.0.1:33001/voices ``` ## Customization diff --git a/ttstoy/dectalk-server/TESTING.md b/ttstoy/dectalk-server/TESTING.md index 7395bac..9108d15 100644 --- a/ttstoy/dectalk-server/TESTING.md +++ b/ttstoy/dectalk-server/TESTING.md @@ -6,15 +6,15 @@ Quick testing guide to verify everything works. ```bash cd ~/Desktop/ttstoy/dectalk-server -PORT=3001 npm start +PORT=33001 npm start ``` You should see: ``` -DECTalk TTS Server running on http://localhost:3001 -Health check: http://localhost:3001/health -Simple API: http://localhost:3001/say?text=Hello -MiniMax-compatible API: POST http://localhost:3001/v1/t2a_v2 +DECTalk TTS Server running on http://localhost:33001 +Health check: http://localhost:33001/health +Simple API: http://localhost:33001/say?text=Hello +MiniMax-compatible API: POST http://localhost:33001/v1/t2a_v2 ``` ## Step 2: Test the API Directly @@ -23,10 +23,10 @@ Open a new terminal and test: ```bash # Test health check -curl http://127.0.0.1:3001/health +curl http://127.0.0.1:33001/health # Test simple endpoint (saves to test.mp3) -curl "http://127.0.0.1:3001/say?text=Hello%20world" -o test.mp3 +curl "http://127.0.0.1:33001/say?text=Hello%20world" -o test.mp3 # Play the audio ffplay test.mp3 @@ -34,7 +34,7 @@ ffplay test.mp3 mpv test.mp3 # Test MiniMax-compatible endpoint -curl -X POST http://127.0.0.1:3001/v1/t2a_v2 \ +curl -X POST http://127.0.0.1:33001/v1/t2a_v2 \ -H "Content-Type: application/json" \ -d '{"text": "Testing DECTalk compatibility", "voice_setting": {"voice_id": "default"}}' \ | jq '.base_resp' @@ -53,7 +53,7 @@ Expected output: In Discord: ``` -[p]ttstoy dectalkurl http://127.0.0.1:3001 +[p]ttstoy dectalkurl http://127.0.0.1:33001 [p]ttstoy mode dectalk [p]ttstoy mode ``` @@ -61,7 +61,7 @@ In Discord: You should see: ``` Current TTS Mode: 🤖 DECTALK -DECTalk API URL: http://127.0.0.1:3001 +DECTalk API URL: http://127.0.0.1:33001 ``` ## Step 4: Test TTS in Discord @@ -88,21 +88,21 @@ The bot should mix DECTalk voice with sound effects. ### Server won't start (port in use) ```bash -# Find what's using port 3001 -lsof -i :3001 +# Find what's using port 33001 +lsof -i :33001 # Use a different port -PORT=3002 npm start +PORT=33002 npm start # Update TTSTOY -[p]ttstoy dectalkurl http://127.0.0.1:3002 +[p]ttstoy dectalkurl http://127.0.0.1:33002 ``` ### "Cannot reach DECTalk API" 1. Check server is running: ```bash -curl http://127.0.0.1:3001/health +curl http://127.0.0.1:33001/health ``` 2. Check server logs in the terminal where you started it diff --git a/ttstoy/dectalk-server/VOICES.md b/ttstoy/dectalk-server/VOICES.md index 6e7cb3c..2b84e57 100644 --- a/ttstoy/dectalk-server/VOICES.md +++ b/ttstoy/dectalk-server/VOICES.md @@ -49,7 +49,7 @@ Voice commands: # Test all voices for voice in paul betty harry frank dennis kit ursula rita wendy; do echo "Testing $voice..." - curl "http://127.0.0.1:3001/say?text=Hello%20I%20am%20$voice&voice=$voice" -o "${voice}.mp3" + curl "http://127.0.0.1:33001/say?text=Hello%20I%20am%20$voice&voice=$voice" -o "${voice}.mp3" done ``` diff --git a/ttstoy/dectalk-server/server.js b/ttstoy/dectalk-server/server.js index 5296d64..7989fda 100644 --- a/ttstoy/dectalk-server/server.js +++ b/ttstoy/dectalk-server/server.js @@ -17,7 +17,7 @@ const path = require('path'); const crypto = require('crypto'); const app = express(); -const PORT = process.env.PORT || 3000; +const PORT = process.env.PORT || 33001; const OUTPUT_DIR = process.env.OUTPUT_DIR || path.join(__dirname, 'output'); // Ensure output directory exists diff --git a/ttstoy/morshu-server/server.py b/ttstoy/morshu-server/server.py index 7498421..06c6dd9 100644 --- a/ttstoy/morshu-server/server.py +++ b/ttstoy/morshu-server/server.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ Morshu TTS Server — standalone HTTP API for MorshuTalk engine. -Runs on port 3002. GET /say?text=... returns WAV audio. +Runs on port 33002. GET /say?text=... returns WAV audio. """ import os import sys @@ -18,7 +18,7 @@ sys.path.insert(0, str(TTSTOY_DIR)) from morshutalk_engine import Morshu morshu = Morshu() -PORT = int(os.environ.get("PORT", 3002)) +PORT = int(os.environ.get("PORT", 33002)) class Handler(BaseHTTPRequestHandler): diff --git a/ttstoy/ttstoy.py b/ttstoy/ttstoy.py index fe71047..f31f828 100644 --- a/ttstoy/ttstoy.py +++ b/ttstoy/ttstoy.py @@ -344,7 +344,7 @@ class TtsToy(Cog): sfx_volume=100, tts_mode="minimax", chatterbox_api_url=CHATTERBOX_DEFAULT_URL, - dectalk_api_url=f"http://127.0.0.1:3001", + dectalk_api_url=f"http://127.0.0.1:33001", dectalk_auto_start=True, accessibility_mode=False, vox_pack="vox", @@ -688,7 +688,7 @@ class TtsToy(Cog): text: Text to synthesize audio_path: Output file path """ - morshu_url = "http://127.0.0.1:3002" + morshu_url = "http://127.0.0.1:33002" try: r = requests.get(f"{morshu_url}/say", params={"text": text}, timeout=60) r.raise_for_status() @@ -1970,7 +1970,7 @@ class TtsToy(Cog): Show or set DECTalk API URL. - `[p]ttstoy dectalkurl` → show current URL - - `[p]ttstoy dectalkurl http://127.0.0.1:3001` → set URL + - `[p]ttstoy dectalkurl http://127.0.0.1:33001` → set URL """ if url is None: current = await self._get_dectalk_api_url() diff --git a/ttstoy/webui/app.py b/ttstoy/webui/app.py index 3ecfe26..d6e0809 100644 --- a/ttstoy/webui/app.py +++ b/ttstoy/webui/app.py @@ -172,7 +172,7 @@ def get_chatterbox_url() -> str: def get_dectalk_url() -> str: cfg = get_global_config() - return cfg.get("dectalk_api_url", "http://127.0.0.1:3001") + return cfg.get("dectalk_api_url", "http://127.0.0.1:33001") # --------------------------------------------------------------------------- @@ -403,7 +403,7 @@ def api_tts_generate(): # Direct server modes — generate audio without the bot if mode == "morshu": try: - r = requests.get("http://127.0.0.1:3002/say", params={"text": text}, timeout=60) + r = requests.get("http://127.0.0.1:33002/say", params={"text": text}, timeout=60) r.raise_for_status() job_id = str(uuid.uuid4()) out_path = tempfile.mktemp(suffix=".wav") @@ -416,7 +416,7 @@ def api_tts_generate(): if mode == "dectalk": try: - dectalk_url = gcfg.get("dectalk_api_url", "http://127.0.0.1:3001") + dectalk_url = gcfg.get("dectalk_api_url", "http://127.0.0.1:33001") r = requests.get(f"{dectalk_url}/say", params={"text": text}, timeout=30) r.raise_for_status() job_id = str(uuid.uuid4()) @@ -680,7 +680,7 @@ def api_mc_tts(): return r.content, 200, {"Content-Type": "audio/wav"} elif mode == "morshu": - r = requests.get("http://127.0.0.1:3002/say", params={"text": text}, timeout=60) + r = requests.get("http://127.0.0.1:33002/say", params={"text": text}, timeout=60) r.raise_for_status() return r.content, 200, {"Content-Type": "audio/wav"} diff --git a/ttstoy/webui/templates/dectalk.html b/ttstoy/webui/templates/dectalk.html index 84bb918..392e848 100644 --- a/ttstoy/webui/templates/dectalk.html +++ b/ttstoy/webui/templates/dectalk.html @@ -8,7 +8,7 @@

About

Classic 1980s robotic speech synthesizer. Voices are controlled inline using commands embedded in your text.
-
Server URL: {{ gcfg.get('dectalk_api_url', 'http://127.0.0.1:3001') }}
+
Server URL: {{ gcfg.get('dectalk_api_url', 'http://127.0.0.1:33001') }}