dolphin-ui is a three-service web interface that unifies self-hosted AI capabilities into a single dark-themed dashboard. it connects a local LLM (Ollama on GPU), image generation (Stable Diffusion on T4), and text-to-speech (ElevenLabs API) behind a Flask backend on questboard-ec2.
a companion project, voice-dolphin, extends the concept into a real-time voice conversation loop running on Rocky with STT via Whisper.
+---------------------------+
| browser (client) |
| tabs: chat|image|audio |
+-------------+-------------+
| HTTP
+-------------v-------------+
| questboard-ec2:8200 |
| Flask app (app.py) |
| nginx proxy :8201 |
| 100.83.251.119 |
+----+--------+--------+----+
| | |
+----------v-+ +---v------+ +v----------------+
| picass0 | | picass0 | | ElevenLabs |
| Ollama | | imggen | | TTS API |
| :11434 | | :7860 | | (external) |
| dolphin- | | SD v1.5 | | |
| llama3:8b | | T4 GPU | | |
+-------------+ +----------+ +-----------------+
100.127.18.29 100.127.18.29 api.elevenlabs.io
Streaming chat via Ollama REST API. Messages are proxied from the Flask backend to picass0. Supports model switching -- any model pulled to Ollama is available via the /api/models endpoint.
dolphin-llama3:8b (Q4_K_M, ~6GB VRAM)/api/chatImage generation via a custom Flask endpoint on picass0. Uses the diffusers library with runwayml/stable-diffusion-v1-5 in float16. Model loads lazily on first request.
Text-to-speech via ElevenLabs API. Voice list is pulled dynamically. Supports monolingual v1, multilingual v2, and turbo v2.5 models. Audio returned as base64 MP3 and played in-browser with a pulsing visualizer.
21m00Tcm4TlvDq8ikWAM)elevenlabs_miecz_api_key/api/health| method | path | description |
|---|---|---|
| POST | /api/chat | streaming chat -- accepts {messages, model}, returns SSE token stream |
| GET | /api/models | list available Ollama models |
| POST | /api/image | image generation -- accepts {prompt, negative_prompt, steps, width, height} |
| POST | /api/tts | text-to-speech -- accepts {text, voice_id, model_id}, returns base64 audio |
| GET | /api/voices | list ElevenLabs voices |
| GET | /api/health | service health -- ollama, image gen, elevenlabs status + chars remaining |
| component | host | port | service |
|---|---|---|---|
| Flask app | questboard-ec2 | 8200 | dolphin-ui.service |
| nginx proxy | questboard-ec2 | 8201 | nginx sites-enabled/dolphin |
| image gen API | picass0 | 7860 | picass0-imggen.service |
| Ollama | picass0 | 11434 | ollama systemd |
Run from Rocky: bash ~/dolphin-ui/deploy.sh
# ec2 (questboard) flask, requests # picass0 (GPU) flask, torch, diffusers, transformers, accelerate, safetensors
single-page app at static/index.html (591 lines, all inline). dark theme with cyan/purple/magenta accents.
| token | value | usage |
|---|---|---|
--bg | #0a0a0f | page background |
--surface | #12121a | panels, header |
--accent | #00d4ff | primary cyan |
--accent2 | #7b2ff7 | purple |
--accent3 | #ff2d95 | magenta/pink |
--success | #00ff88 | health dots (online) |
--error | #ff4444 | health dots (offline) |
a standalone voice conversation loop that runs on Rocky. extends dolphin-ui into real-time spoken interaction.
+----------+ +----------+ +----------+ +----------+ | mic |--->| whisper |--->| ollama |--->|elevenlabs|---> speakers | (Rocky) | | STT | | (SSH | | TTS | | | | (Rocky | | tunnel | | (API) | | | | CPU) | | picass0)| | | +----------+ +----------+ +----------+ +----------+
sounddevicefaster-whisper (base model, CPU, int8)--text) -- keyboard input, still uses TTS for output if available.artificer/.afterHours/voice-dolphin/dolphin.py)| file | location | purpose |
|---|---|---|
app.py | ~/dolphin-ui/ | Flask backend -- routes, API proxying, health checks |
index.html | ~/dolphin-ui/static/ | web UI -- 591 lines, all inline CSS/JS |
deploy.sh | ~/dolphin-ui/ | deployment script -- ec2 + picass0 + nginx |
picass0_imggen.py | ~/dolphin-ui/ | image gen API for picass0 GPU |
dolphin.py | ~/.artificer/.afterHours/voice-dolphin/ | voice loop script (Rocky-side) |
voice-dolphin.md | ~/.artificer/.afterHours/ | planning doc -- stack, models, build order |
brick_bot.py | ~/dolphin-ui/ | Telegram agent (separate, shares deploy dir) |
mailbox_daemon.py | ~/dolphin-ui/ | email listener for brick.sl (separate) |
| credential | vault entry | used by |
|---|---|---|
| ElevenLabs API key | elevenlabs_miecz_api_key | app.py (env var), dolphin.py |
| ElevenLabs fallback | elevenlabs_ecoute_api_key | dolphin.py (fallback) |
| picass0 SSH key | ~/forge3/questboard-key.pem | deploy.sh, dolphin.py tunnel |
documented by goulard3120 // tunnelTime // 2026-05-07