|
Download README.md from hkblockchaintechnology/lyra-studio: direct link, hf CLI and curl.
- Browser
- Download file 4.6 kB
-
https://huggingface.co/hkblockchaintechnology/lyra-studio/resolve/main/README.md
- Command line
-
hf download hf://hkblockchaintechnology/lyra-studio/README.md
-
curl -L -o README.md https://huggingface.co/hkblockchaintechnology/lyra-studio/resolve/main/README.md
4.6 kB
| library_name: lyra-studio | |
| license: apache-2.0 | |
| language: [yue, zh, en] | |
| tags: [text-to-image, text-to-speech, music-generation, lip-sync, virtual-idol, cantonese, cantopop, digital-human] | |
| # LYRA — an AI-native Cantopop idol | |
| ### 莉拉 · 一個喺機器入面出世嘅香港女仔 | |
| **LYRA is an original AI-native character**, built end-to-end on a single GPU by a *studio of | |
| specialist models* cooperating like a small animation/music house — the same **methodology** | |
| behind characters like *Yuri* (AI.TALK), not a copy of one. | |
| She is a **Hong Kong girl** chasing her dream to become a Cantopop star, who exists to | |
| **give positive energy back to the people of Hong Kong.** | |
| > **The lesson we took from the reference:** the moat is not the models — everyone has the models. | |
| > The moat is **forming a character**: one face, one voice, one tone, one timeline, never drifting. | |
| > One bible drives every specialist. See `character/studio_core.py`. | |
| ## 🎬 Watch — `assets/video/lyra_showcase.mp4` (2:29) | |
| | # | Song | Video | | |
| |---|---|---| | |
| | 1 | **《霓虹裡的我》** *Me in the Neon* — 58.7 s | `neon_me_mv.mp4` | | |
| | 2 | **《香港嘅女孩》** *The Hong Kong Girl* — 84.3 s | `hongkong_girl_mv.mp4` | | |
| | ★ | **Both, back to back** | `assets/video/lyra_showcase.mp4` | | |
| Each is a title card → LYRA **lip-syncing her own sung vocal** → full Cantopop song. All **44.1 kHz**. | |
| | Asset | Path | | |
| |---|---| | |
| | 🎬 Showcase / MVs | `assets/video/lyra_showcase.mp4`, `neon_me_mv.mp4`, `hongkong_girl_mv.mp4` | | |
| | 🎞️ Isolated performances | `assets/video/lyra_perf_song1.mp4`, `lyra_perf_song2.mp4` | | |
| | 🗣️ Talking clip | `assets/video/lyra_talk_sig.mp4` | | |
| | 🎵 Songs (44.1k) | `assets/music/song1_mix.mp3`, `song2_mix.mp3` | | |
| | 🎤 Stems | `song1_vocal.wav` / `song1_instrumental.wav` (+ song2) | | |
| | 🎨 Renders (10) | `assets/img/*.png` | | |
| | 🗣️ Cantonese voice lines | `assets/audio/*.wav` | | |
| **Lyrics — 《香港嘅女孩》** | |
| > 我係香港嘅女孩 追住嗰道光 / 就算跌低 都要唱落去 | |
| > 我係香港嘅女孩 唔怕天黑 / 因為我哋一齊 就會有光 | |
| ## 👥 The studio (one GPU, five departments) | |
| | Dept | Model | Role | | |
| |---|---|---| | |
| | 🧠 Director | **Qwen2.5-VL-7B-Instruct** | writes lyrics, scripts, shot prompts; judges | | |
| | 🎨 Concept Artist | **Qwen-Image 20B** | renders her face, outfits, scenery, title cards | | |
| | 🧑🎨 Vision Critic | **Qwen2.5-VL-7B-Instruct** | scores each frame vs the bible, returns fixes | | |
| | 🗣️ Voice Actor | **Qwen3-TTS 1.7B + HK-Cantonese LoRA** (`jmtl/hk-cantonese-cc0-qwen3-tts`) | true Hong Kong Cantonese | | |
| | 🎵 Composer | **YuE 7B + 1B** | lyrics-to-song, dedicated **Cantonese** tag | | |
| | 🎞️ Animator | **Wav2Lip** | lip-sync to her own voice | | |
| | ✂️ Editor | **ffmpeg** | title card + performance + song | | |
| **Self-improving loop:** the Critic's *fixes are fused back into the prompt and persisted* | |
| (`character/refinements.json`) — she sharpens every run. | |
| **Verified, not assumed:** her Cantonese was round-tripped through **Whisper** — intended | |
| `我唔係真人,但我一樣會唱到你心入面。` returned as `我不是真人但我一样会唱到你心里面`. | |
| ## 🧬 Her bible (single source of truth) | |
| ```python | |
| CHARACTER = { | |
| "name": "LYRA", "home": "Hong Kong", "look_age": "19", | |
| "primary_language": "Cantonese (yue-HK)", | |
| "dream": "to become a Cantopop star", | |
| "mission": "to give positive energy back to the people of Hong Kong", | |
| "values": ["resilience", "warmth", "home", "never stop believing"], | |
| "origin": "grew up in a Mong Kok walk-up, watching the harbour lights from the rooftop", | |
| } | |
| ``` | |
| ## 🛠️ Reproduce | |
| `scripts/setup_voice.sh` → `merge_voice.sh` → `setup_music.sh` → `yue_sing.sh` → | |
| `setup_lipsync.sh` → `studio_daemon.py` → `edit_mv.sh` | |
| > Traps we hit: molab exports `PYTHONPATH` (breaks every isolated venv — clear it) and sets | |
| > `PYTHONSAFEPATH=1` (hides your script dir). Current `torchaudio` demands TorchCodec, so YuE's | |
| > four save/load sites were patched to `soundfile`. | |
| ## ⚖️ Credits & licenses | |
| No model weights are shipped here — artefacts and orchestration code only. | |
| - **Qwen-Image**, **Qwen2.5-VL-7B**, **Qwen3-TTS-12Hz-1.7B** — Apache-2.0 (Qwen/Alibaba) | |
| - **hk-cantonese-cc0-qwen3-tts** LoRA — Apache-2.0 (`jmtl`), CC-0 Common Voice `yue` | |
| - **YuE** — see upstream licence · **Wav2Lip** — research/non-commercial · **ffmpeg** — LGPL/GPL | |
| **LYRA is an original fictional character.** Not Yuri, not affiliated with AI.TALK, not a likeness | |
| of any real person. Released as a technical demo. | |