Thalika သည် Next.js, TypeScript, TailwindCSS နှင့် optional Electron desktop shell ကို အသုံးပြုထားသော local-first voice-over studio ဖြစ်သည်။
Script များ၊ generation job များ၊ generated audio များနှင့် draft state ကို local data/ folder အောက်တွင် သိမ်းဆည်းသည်။ Database မသုံးပါ။
- Gemini API ဖြင့် script rewrite လုပ်နိုင်သော Script page
- Script input နှင့် reference audio upload ပါသော Voice Over page
- VoxCPM2 engine ကို အသုံးပြုသော single provider (Burmese script အတွက် pronunciation QA အလိုလို အသုံးပြုသည်)
- Managed local VoxCPM2 inference (Apple Silicon MPS, NVIDIA CUDA သို့မဟုတ် CPU)
- Voice reference နှင့် settings မှ stable seed ထုတ်ပြီး chunk အားလုံးတွင် တစ်ခုတည်းအသုံးပြုသော consistency control
- Pace/loudness outlier detection၊ selective regeneration နှင့် conservative chunk loudness matching
- Validated
48kHzmono24-bit PCM WAVmaster output - Long script များအတွက် punctuation-aware chunk ခွဲခြင်းနှင့် PCM WAV merge လုပ်ခြင်း
- Audio preview နှင့် download
- Audio player, listening QA score နှင့် delete action ပါသော History page
- Local consented voice profiles နှင့် editable Burmese pronunciation lexicon
- Browser-side reference audio quality gate
- Local storage ကို ကြည့်ရှုနိုင်ပြီး legacy compressed audio များကို PCM WAV ပြောင်းနိုင်သော Folders page
- Optional Electron desktop shell
- Frontend: Next.js App Router, React, TailwindCSS
- Backend: Next.js Route Handlers
- Desktop shell: Electron
- Validation: Zod
- Storage: local Markdown, JSON, audio files
- Local voice model: VoxCPM2
2.0.3ကိုlocal-server/(Python + Gradio) မှတစ်ဆင့် run သည် - Script rewrite provider: Google Gemini API
- Node.js
22.12.0သို့မဟုတ် ပိုသစ်သော version - npm
- Python
3.10–3.12 - VoxCPM2 model ပထမဆုံး download နှင့် Gemini rewrite အတွက်သာ Internet connection
- Local VoxCPM2 အတွက် 16 GB RAM နှင့် Apple Silicon MPS သို့မဟုတ် NVIDIA CUDA recommended; CPU-only run နိုင်သော်လည်း နှေးသည်
VoxCPM2 inference ကို managed local server (http://localhost:7860) မှတစ်ဆင့်သာ production flow အဖြစ် run သည်။ Model cache ပြည့်ပြီးနောက် voice generation အတွက် Internet မလိုပါ။
cd /Users/zoe/Downloads/beebot/coda-voice-clone/Thalika
npm installDefault တန်ဖိုးများကို ပြောင်းလိုပါက သို့မဟုတ် Gemini rewrite ကို အသုံးပြုလိုပါက .env.example ကို .env.local အဖြစ် copy လုပ်ပါ။
cp .env.example .env.localအသုံးပြုနိုင်သော တန်ဖိုးများ:
HF_VOXCPM2_URL=http://localhost:7860
HF_REQUEST_TIMEOUT=60000
HF_INFERENCE_TIMEOUT=300000
VOXCPM_DEVICE=auto
VOXCPM_TIMESTEPS=10
GEMINI_REQUEST_TIMEOUT=60000
GEMINI_API_KEY=your_google_gemini_api_key_hereHF_VOXCPM2_URL: Managed local VoxCPM2 server URL; defaulthttp://localhost:7860HF_REQUEST_TIMEOUT: Local model health/upload request timeout millisecondsHF_INFERENCE_TIMEOUT: VoxCPM2 audio segment တစ်ခု generate လုပ်ရန် စောင့်မည့် အများဆုံး millisecondsVOXCPM_DEVICE:auto,mps,cuda, သို့မဟုတ်cpuVOXCPM_TIMESTEPS: Diffusion sampling steps; quality/speed tradeoffGEMINI_REQUEST_TIMEOUT: Gemini request timeout millisecondsGEMINI_API_KEY: Script page မှ rewrite လုပ်ရာတွင် အသုံးပြုသော Gemini API key
Script page ရှိ settings dialog မှတစ်ဆင့် GEMINI_API_KEY ကို .env.local ထဲသို့ သိမ်းဆည်းနိုင်သည်။
Development mode:
npm run devProduction mode:
npm run build
npm run startBrowser တွင် ဖွင့်ရန်:
http://localhost:3000
Development desktop mode:
npm run desktopProduction desktop mode:
npm run build
npm run desktop:startElectron shell သည် local Next.js app ကို ဖွင့်ပေးသည်။ Backend အသစ်တစ်ခု ထပ်မံထည့်သွင်းထားခြင်း မရှိပါ။
Electron shell တွင် အောက်ပါ settings များကို အသုံးပြုထားသည်။
nodeIntegration: falsecontextIsolation: truesandbox: truewebSecurity: true- single-instance lock
နောက်ဆုံး Electron window ကို ပိတ်လိုက်ပါက Electron process ပိတ်သွားမည်။ desktop:start က local Next.js server ကို စတင်ပေးထားခြင်း ဖြစ်ပါက Electron ပိတ်သည့်အခါ launcher က ထို server ကိုပါ ရပ်ပေးမည်။
Electron binary cache မပြည့်စုံပါက:
npm run repair:electronရှိပြီးသား script ကို Gemini ဖြင့် rewrite လုပ်ရန် ဤ page ကို အသုံးပြုပါ။
- Script tab ကို ဖွင့်ပါ။
- Original script ကို paste လုပ်ပါ။
- လိုအပ်ပါက title ထည့်ပါ။
- Gemini model ကို ရွေးပါ။
Keep Burmese languageကို လိုအပ်သလို on သို့မဟုတ် off လုပ်ပါ။Rewrite Narrationကို နှိပ်ပါ။- Rewritten result ကို စစ်ဆေးပြီး လိုအပ်ပါက ပြင်ဆင်ပါ။
Open Voice Overကို နှိပ်ပါ။
Rewritten result ကို shared Voice Over draft အဖြစ် သိမ်းဆည်းသည်။
App တွင် လက်ရှိ ပြသထားသော model options များ:
- Gemini 2.5 Flash
- Gemini 3.5 Flash
- Gemini 3.1 Flash Lite
ရွေးချယ်ထားသော model ကို configured Gemini API endpoint က လက်ခံနိုင်ရမည်။
Voice Over audio generate လုပ်ရန် ဤ page ကို အသုံးပြုပါ။
- Voice Over tab ကို ဖွင့်ပါ။
- Script ကို paste လုပ်ပါ သို့မဟုတ် ပြင်ဆင်ပါ။
- လိုအပ်ပါက title ထည့်ပါ။
- Reference audio upload လုပ်ပါ သို့မဟုတ် သိမ်းထားသော local voice profile ကို ရွေးပါ။
- Browser-side reference quality report ကို စစ်ပါ။
BLOCKဖြစ်နေပါက cleaner sample ပြန်တင်ပါ။ - Burmese script ဖြစ်ပါက pronunciation preview ကို review လုပ်ပြီး approve လုပ်ပါ။
Generate Local Audioကို နှိပ်ပါ။- Generated audio file ကို preview လုပ်ပါ သို့မဟုတ် download လုပ်ပါ။
Provider တစ်ခုတည်း (single engine):
VoxCPM2— Burmese script ဖြစ်ပါက Burmese pronunciation QA (normalization + lexicon + approval gate) အလိုလို အသုံးပြုသည်။ Burmese မဟုတ်သော supported multilingual scripts အတွက် raw VoxCPM2 ကို အသုံးပြုသည်။
Voice Over controls များ:
- Reference audio upload
- Local voice profile selector နှင့် explicit-consent profile save
- Reference transcript (optional — cloning အတွက် လိုအပ်ခြင်းမရှိ၊ model သို့လည်း မပို့ပါ)
- Browser-side reference quality report
- Burmese pronunciation lexicon
- Advanced tuning: clone mode, clone strength, reference denoise, text normalization
- Speed:
0.8xမှ1.2x - Emotion:
neutral,calm,energetic,dramatic
VoxCPM2 model interface တွင် dedicated numeric speed parameter မရှိပါ။ Speed slider ကို pace guidance အဖြစ် control instruction ထဲတွင် အသုံးပြုသည်။
Recommended reference audio သည် 6-30 seconds၊ quiet room၊ one speaker၊ music မပါသော dry voice ဖြစ်သည်။ Local voice profile ကို user က consent checkbox ဖြင့် အတည်ပြုပြီး Save Local Profile နှိပ်မှသာ device disk ပေါ်တွင် သိမ်းသည်။
လူပြောသံတွင် natural pauses ပါနိုင်သည်။ Silence ratio မြင့်ရုံဖြင့် block မလုပ်ပါ။ Reference file သည် almost entirely silent ဖြစ်မှသာ generation ကိုတားသည်။ VoxCPM2 transcript mode က segment တစ်ခုအတွက် audio မပြန်ပေးနိုင်ပါက Thalika သည် zero-shot reference fallback ဖြင့် ဆက်လုပ်ပြီး local diagnostics တွင် မှတ်တမ်းတင်သည်။
ဤ page တွင် အောက်ပါ လုပ်ဆောင်ချက်များကို အသုံးပြုနိုင်သည်။
- သိမ်းဆည်းထားသော generation job များကို ကြည့်ရှုခြင်း
- Generated audio ကို play လုပ်ခြင်း
- Audio seek လုပ်ခြင်း
- Playback speed ပြောင်းခြင်း
- Audio download လုပ်ခြင်း
- Audio ဖွင့်ခြင်း
- History job ဖျက်ခြင်း
- Speaker similarity, Burmese pronunciation, naturalness နှင့် clean audio ကို
1-5score ပေးခြင်း - Generated audio ကို
approvedသို့မဟုတ်review neededအဖြစ်မှတ်သားခြင်း
Completed job တစ်ခုကို ဖျက်လိုက်ပါက သက်ဆိုင်ရာ generated audio file ကိုပါ ဖျက်သည်။ သက်ဆိုင်ရာ saved script Markdown file ကို မဖျက်ပါ။
App က စီမံထားသော local storage folders များကို ကြည့်ရှုရန် ဤ page ကို အသုံးပြုပါ။
ဤ page တွင် အောက်ပါ အချက်အလက်များကို ပြသသည်။
- Folder path
- File count
- Total size
- Latest modification time
- Recent files
Browser mode တွင် folder path ကို copy လုပ်နိုင်သည်။ Electron mode တွင် သတ်မှတ်ထားသော app-managed folders များကို Finder သို့မဟုတ် Explorer ထဲတွင် ဖွင့်နိုင်သည်။
PCM WAV Migration section ကို အသုံးပြုပြီး ယခင် version များမှ .mp3 outputs နှင့် MP3 bytes ပါနေသော mislabeled .wav files များကို real PCM WAV masters အဖြစ် ပြောင်းနိုင်သည်။ Migration မစမီ user confirmation တောင်းသည်။ မူရင်း compressed files များကို data/outputs/legacy-backup/ အောက်တွင် သိမ်းထားပြီး သက်ဆိုင်ရာ job Markdown metadata ကို migrated .wav filename ဖြင့် update လုပ်သည်။
Default inference engine သည် local server (http://localhost:7860) ဖြစ်သည်။ Thalika က model queue, seed, inference steps, retry, chunk selection နှင့် WAV merge ကို နောက်ကွယ်မှ စနစ်တကျ ထိန်းသည်။ အသေးစိတ်အတွက် local-server/README.md ကို ကြည့်ပါ။
လိုအပ်ချက်များ
- Python
3.10,3.11, သို့မဟုတ်3.12(3.13+ ကိုvoxcpm/PyTorch stack က လက်မခံပါ)။python3 --versionဖြင့် စစ်ပါ။ - GPU ရှိလျှင် ပိုကောင်းသည် (Apple Silicon MPS, NVIDIA CUDA)။ CPU နှင့်လည်း run နိုင်သော်လည်း နှေးသည်။
- Model (~5 GB) ကို ပထမဆုံး run တွင် download လုပ်သည်။ 16 GB RAM recommended။
Install နှင့် run လုပ်ခြင်း
repo root မှ:
bash scripts/voxcpm-local.sh၎င်းသည် .voxcpm-venv တည်ဆောက်ပြီး requirements.txt install လုပ်ကာ local-server/server.py ကို run သည်။ Server တက်လာသည်နှင့် http://localhost:7860 တွင် ရောက်သည်။ Python version မှားနေပါက brew install python@3.11 (သို့) uv ကို အသုံးပြုပါ — အသေးစိတ်အတွက် local-server/README.md။
App ကို local server သို့ ချိတ်ခြင်း
- App → Voice Over → Voice Settings တွင်
Start local modelကို နှိပ်ပါ။ - Health badge
Local connectedဖြစ်သည်အထိ စောင့်ပါ။ - Command line မှ run လိုပါက
bash scripts/voxcpm-local.shကို အသုံးပြုပါ။
Quality tuning (local server တွင်သာ)
| Variable | Default | အကျိုးသက်ရောက်မှု |
|---|---|---|
VOXCPM_DEVICE |
auto |
auto / cuda / mps / cpu |
VOXCPM_TIMESTEPS |
10 |
Diffusion steps။ မြင့်လျှင် ပိုကောင်းသော်လည်း နှေးသည်။ 20–30 စမ်းကြည့်ပါ။ |
VOXCPM_PORT |
7860 |
Server port (app ၏ endpoint နှင့် ကိုက်ရမည်) |
Audio generation request များအတွက် အောက်ပါ rules များကို သတ်မှတ်ထားသည်။
| Field | Rule |
|---|---|
| Title | Optional၊ အများဆုံး 100 characters |
| Script | Required၊ 10 မှ 50,000 characters |
| Provider | voxcpm2 (single engine) |
| Format | Final output အတွက် wav တစ်မျိုးတည်း |
| Speed | 0.8 မှ 1.2 |
| Emotion | neutral, calm, energetic, သို့မဟုတ် dramatic |
| Clone mode | Optional: balanced သို့မဟုတ် high_fidelity |
| Clone strength | Optional: 1.0 မှ 3.0 |
| Reference audio | VoxCPM2 cloning အတွက် required |
| Reference audio size | အများဆုံး 10 MB |
| Reference audio duration | Duration ရရှိပါက အနည်းဆုံး 3 seconds နှင့် အများဆုံး 50 seconds |
Script အရှည်ကို အများဆုံး 50,000 characters အထိ လက်ခံသည်။
VoxCPM2 request များအတွက် script ကို default 180 characters ဝန်းကျင် punctuation-aware chunks အဖြစ် ခွဲသည်။ Local model သည် chunk တစ်ခုစီကို WAV ဖြင့်ပြန်ပေးပြီး Thalika က real 48kHz mono 24-bit PCM WAV အဖြစ် validate လုပ်သည်။ Voice reference၊ clone settings နှင့် emotion တူပါက stable consistency seed တစ်ခုတည်းကို chunk အားလုံးတွင် အသုံးပြုသည်။
Chunk တစ်ခုစီ၏ pace နှင့် active loudness ကို accepted chunks များ၏ median နှင့်နှိုင်းသည်။ Outlier ဖြစ်မှသာ alternate deterministic take များစမ်းပြီး အနီးဆုံး take ကိုရွေးသည်။ Merge မတိုင်ခင် active RMS ကို median ဆီ အများဆုံး ±3 dB ဖြင့် peak-safe ချိန်ညှိကာ final RIFF/WAVE master တစ်ခုအဖြစ် merge လုပ်သည်။
| Chunk ending | Pause |
|---|---|
။, ., !, ? |
260ms |
၊, ,, ;, : |
160ms |
| Explicit punctuation မရှိ | 120ms |
Long script generate လုပ်နေစဉ် chunk progress ကို သက်ဆိုင်ရာ data/jobs/ Markdown file တွင် သိမ်းသည်။ Local inference အလွန်ကြာသွားပါက HF_INFERENCE_TIMEOUT ရောက်သောအခါ clean timeout ဖြစ်ပြီး retry လုပ်သည်။ Local diagnostics ကို data/logs/generation.log တွင် သိမ်းသည်။ ဤ log တွင် script စာသားနှင့် reference audio bytes မပါပါ။
data/
scripts/ saved script Markdown files
jobs/ generation job Markdown files
outputs/ generated PCM WAV master files
legacy-backup/ migration မတိုင်မီ မူရင်း compressed audio backup files
profiles/ consented local voice profile audio and JSON metadata
reviews/ local Markdown listening QA reviews
memory/
MEMORY.md local memory notes
MEMORY.example.md shareable memory note example
voice-over-draft.json
burmese-lexicon.json local pronunciation overrides
Script page နှင့် Voice Over page တို့သည် data/memory/voice-over-draft.json ကို shared draft အဖြစ် အသုံးပြုသည်။
.env.local, generated scripts, generation jobs, audio outputs, MEMORY.md နှင့် draft state များကို Git ထဲသို့ မတင်ရန် .gitignore တွင် တားထားသည်။ Share လုပ်နိုင်သော examples များအဖြစ် .env.example, folder .gitkeep files နှင့် data/memory/MEMORY.example.md ကို ထည့်ထားသည်။
| Method | Route | အသုံးပြုပုံ |
|---|---|---|
GET |
/api/health |
Local service health စစ်ခြင်း |
POST |
/api/generate |
Audio generate လုပ်ခြင်း |
GET |
/api/audio/{filename} |
Generated audio file ကို stream လုပ်ခြင်း |
GET |
/api/history |
Generation jobs များကို ဖော်ပြခြင်း |
DELETE |
/api/history/{jobId} |
Generation job ဖျက်ခြင်း |
PUT |
/api/history/{jobId}/review |
Human listening QA score သိမ်းခြင်း |
GET |
/api/scripts |
Saved scripts များကို ဖော်ပြခြင်း |
GET |
/api/providers/capabilities |
Provider capability metadata ဖော်ပြခြင်း |
GET |
/api/providers/voxcpm2/health |
Managed local VoxCPM2 server ကို probe လုပ်ခြင်း |
POST |
/api/rewrite |
Gemini ဖြင့် script rewrite လုပ်ခြင်း |
GET, POST |
/api/settings/gemini |
Gemini API key state ဖတ်ခြင်း သို့မဟုတ် သိမ်းဆည်းခြင်း |
GET, POST, DELETE |
/api/drafts/voice-over |
Shared Voice Over draft ဖတ်ခြင်း၊ သိမ်းဆည်းခြင်း သို့မဟုတ် ဖျက်ခြင်း |
POST |
/api/burmese/normalize |
Burmese pronunciation preview ပြင်ဆင်ခြင်း |
GET, PUT |
/api/settings/burmese-lexicon |
Local pronunciation lexicon ဖတ်ခြင်း သို့မဟုတ် သိမ်းခြင်း |
GET, POST |
/api/voice-profiles |
Local voice profile များဖတ်ခြင်း သို့မဟုတ် consent ဖြင့် သိမ်းခြင်း |
DELETE |
/api/voice-profiles/{profileId} |
Local voice profile နှင့် reference audio ဖျက်ခြင်း |
GET |
/api/storage/local |
App-managed local folders များကို စစ်ဆေးခြင်း |
GET, POST |
/api/storage/migrate-wav |
Legacy compressed outputs ကို စစ်ဆေးခြင်း သို့မဟုတ် explicit confirmation ဖြင့် PCM WAV ပြောင်းခြင်း |
GET, POST, DELETE |
/api/voxcpm-local |
Local VoxCPM2 server status ကြည့်ခြင်း၊ start/stop လုပ်ခြင်း |
- Audio serving သည်
data/outputs/အောက်မှသာ file ဖတ်သည်။ - Generated filenames များကို sanitize လုပ်သည်။
- Storage inspection တွင် သတ်မှတ်ထားသော app-managed folders များကိုသာ ဖော်ပြသည်။
- Electron folder opening သည် သတ်မှတ်ထားသော folder IDs များကိုသာ လက်ခံသည်။
- Provider inference သည် shell commands များကို execute မလုပ်ပါ။
Voice Over page သည် /api/providers/voxcpm2/health ကို ခေါ်သည်။
Badge တွင် အောက်ပါ status များ ပေါ်နိုင်သည်။
Local connectedLocal timeoutLocal unavailableLocal invalid response
Health result သည် local model server ၏ လက်ရှိ state ကို ဖော်ပြသည်။ Local connected မဖြစ်မချင်း Generate button ကို disable လုပ်ထားသည်။
လက်ရှိ memory usage ကို စစ်ရန်:
npm run metrics:memoryCPU နှင့် RAM ကို sample ငါးကြိမ်ဖြင့် စစ်ရန်:
npm run metrics:resourcesဤ commands များသည် detected Thalika, Next.js, Electron နှင့် local VoxCPM2 runtime processes များကို report ပြသည်။
TypeScript စစ်ရန်:
npm run lintProduction build စစ်ရန်:
npm run buildGenerate Local Audio button ကို နှိပ်မရပါက အောက်ပါ အချက်များကို စစ်ပါ။
- Script length
- VoxCPM2 သို့မဟုတ် Burmese Production အတွက် reference audio upload
- Reference audio file size
- Reference audio duration
VoxCPM2 generation အလုပ်မလုပ်ပါက အောက်ပါ အချက်များကို စစ်ပါ။
- Local model server running state
- VoxCPM2 health badge
HF_VOXCPM2_URLHF_REQUEST_TIMEOUTHF_INFERENCE_TIMEOUTdata/logs/generation.log
Gemini rewrite အလုပ်မလုပ်ပါက အောက်ပါ အချက်များကို စစ်ပါ။
GEMINI_API_KEYGEMINI_REQUEST_TIMEOUT- Configured Gemini API က ရွေးချယ်ထားသော model ကို လက်ခံခြင်း ရှိ၊ မရှိ
Electron binary cache မပြည့်စုံပါက:
npm run repair:electron