Files
esh-pfi-infrastructure/stacks/mOrpheus
vh e0d1c44137 chore(fleet): repoint stale irv-ml1 refs (10.100.79.3 -> irv-ml1.nh3.internal)
The 2026-09-06 headscale cutover retired irv-ml1's wg0 tunnel IP 10.100.79.3
(now 10.6.110.50). Repointed all LIVE canonical refs to the DNS NAME so the next
move can't re-break them: homepage.href/siteMonitor labels across 25 stack
composes, load-bearing env defaults (asset-engine INFERENCE_HOST, open-webui
AUDIO_TTS_OPENAI_API_BASE_URL, skaldsong SKALDSONG_TTS_BASE_URL, zonos-gateway
ZONOS_URL, dia), homepage services.yaml manual cards (Voice Design Studio,
IRV-ML1), and servers/irv-ml1/ssh-target. Updated the stale 'WG tunnel' comment
to the mesh reality.

Left as-is: README curl-examples and .env.example comments (docs), and historical
mentions in CLAUDE.md/persistent-memory. NOTE: applying the label repoints to the
RUNNING irv-ml1 containers needs a recreate per service (labels read at creation);
deployed .env values are separate from these canonical defaults.
2026-09-07 15:08:56 -07:00
..

mOrpheus — uncensored Orpheus TTS (irv-ml1)

Permanent serving stack for MrDragonFox/mOrpheus_3B-1Base_early_preview-v1-25000 — an uncensored Orpheus TTS finetune (Llama-3.2-3B LLM → SNAC 24 kHz audio). Trained speaker "baddy"; supports zero-shot voice cloning from a reference clip.

INTERNAL RESEARCH ONLY. License is CC-BY-NC-4.0 (non-commercial). Do not expose this endpoint externally or use it in any commercial-facing product.

Shape

Two containers (see compose.yaml):

service where role
vllm-morpheus GPU (3090), FP8 serves the mOrpheus LLM; emits Orpheus audio tokens
morpheus-tts CPU SNAC-decodes tokens → 24 kHz WAV; the public /tts endpoint

Real-time: ~165 tok/s single-stream on the 3090 (FP8) ⇒ RTF ≈ 0.50 (2× real-time), measured. A ~4 s clip generates in ~2 s. (Whole-clip decode in v1; chunked streaming for lower time-to-first-audio is a future enhancement.)

Endpoints (http://10.100.79.3:8299)

  • POST /ttsaudio/wav. Body: {"text": "...", "voice": "baddy", "temperature": 0.6, "max_tokens": 1200, "repetition_penalty": 1.1}.
    • Zero-shot clone (ad-hoc): add "reference_audio_b64": "<base64 WAV>" + "reference_text": "<its transcript>". Keep repetition_penalty <= 1.1 for cloning (higher penalizes the in-context reference audio tokens and breaks generation).
    • Staged clone voices: drop <name>.wav + <name>.txt (its transcript) into the voices dir (/home/lkraven/morpheus/voices/); each is encoded to its reference block once at startup, so voice: "<name>" zero-shot clones it (e.g. beatrice). GET /voices lists them.
    • max_tokens defaults to 3500 (~42 s), auto-clamped so prompt + gen never exceeds the 4096 context (a cloning reference block is ~1,100 tokens). repetition_penalty 1.1 is load-bearing — at 1.0 the model never emits end-of-speech and rambles to the cap.
  • GET /voices, GET /health, GET /docs (OpenAPI UI).

Expressive tags (baddy is trained for these): <sigh> <gasp> <laugh> <chuckle> <pant> <groan> <moan> etc. Use real carrier sentences with sparse, sentence-boundary tags — stacking many tags with little text sends this early checkpoint into a repeat-loop.

Deploy (irv-ml1, as lkraven — docker-group, no sudo)

# one-time: stage weights (from the audition dir or a fresh pull-hf-repo) + copy the stack
mkdir -p /home/lkraven/morpheus/models
mv /home/lkraven/orpheus-audition/models/mOrpheus     /home/lkraven/morpheus/models/
mv /home/lkraven/orpheus-audition/models/snac_24khz   /home/lkraven/morpheus/models/
# copy compose.yaml + tts/ to /home/lkraven/morpheus/, cp .env.example .env
cd /home/lkraven/morpheus && docker compose build && docker compose up -d

Gotchas

  • Pin vllm/vllm-openai:v0.23.0latest ships Blackwell-only kernels (oink/aiter) that crash on Ampere import. Do not bump to latest on this box.
  • GPU = 3090, not the A6000 — the A6000 is comfy's and spikes to ~41 GB without warning (OOM'd two launches). FP8's ~5 GB footprint coexists with the 3090 audio zoo.
  • FP8 on Ampere is a VRAM save (upcast), no compute speedup — real-time comes from vLLM.
  • Canonical copy lives here; deployed copy is /home/lkraven/morpheus/ on irv-ml1.