zhenzhen-lyria2-fal
Google's Lyria 2 music, right inside ComfyUI — for a few credits a pop
- audio
- audio_url
- response
You type a prompt, a melody comes back, and it lands in your graph as a proper AUDIO tensor you can preview, save, or feed straight into a video node. That's the whole job of Comfly_lyria2_fal (shown in ComfyUI as "zhenzhen-lyria2-fal"): Google DeepMind's Lyria 2 music model, called as a cloud API instead of run on your GPU. Lyria has no open weights, so there's no local option - this is a "call it or don't use it" model, and this node is the call-it path inside ComfyUI.
It ships in the T8mars/Comfyui-zhenzhen pack, which is a giant collection of API-wrapper nodes ("Comfly…") that all route through the author's paid reseller service, 贞贞的AI工坊 (Zhenzhen AI Workshop, ai.t8star.org). Think of it as a fan-run, low-margin proxy in front of a pile of closed models. This node is the FAL-class variant: it hits the author's /fal endpoint with your key as a Bearer token, submits the job, polls until it's done, then downloads and decodes the result. Because the "FAL" billing model is pre-deduct - the site holds a few credits up front and refunds the difference when the job settles - don't be surprised if the ledger moves before the music finishes.
The inputs that matter
It's a small node. The one required input is prompt - a short musical description, like "a warm lo-fi beat with vinyl crackle." Everything else is optional:
negative_prompt- defaults to "low quality", which is the sensible thing to keep.seed- a real FAL parameter here (0–65535, 0 = random), unlike some sibling nodes where seed is just cache control.poll_intervalandmax_poll_attempts- default6s × 600= a one-hour timeout ceiling. Tune down if you want it to give up faster.skip_error- if on, a failed job returns a placeholder instead of killing your workflow. Handy for batch runs, less handy when you're debugging.
You'll also see a plain api_key field. That's where the key from the Zhenzhen site goes - the FAL nodes take it directly on the node, unlike the pack's "lowprice" nodes which read it from a shared settings node.
Outputs and what to wire them into
audio- theAUDIOoutput. This is the one you want: wire it to a save/playback node or anything that eats audio.audio_url- a string pointing at the hosted file, useful if you'd rather download it by hand.response- the raw API response for debugging or passing metadata along.
Installing it
The pack installs as a whole - no per-node install, no model downloads, nothing runs locally.
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
# restart ComfyUI
ComfyUI Manager also has it; search "Comfyui-zhenzhen" and install. Then grab an API key from the author's site (ai.t8star.org, or api.seedance.nz for the cheaper China site) and paste it into the node. One catch worth knowing: this is a one-person reseller operation, and registration has been paused at times - if sign-up is closed when you arrive, that's the service, not your install.
Where people get burned
Mostly it's connectivity, not the node. If you see 443/TLS errors, it's usually the network path to the author's overseas server - a proxy fixes it, and the pack even auto-fails over between the .org and .cn endpoints to dodge the problem. And remember the security reality of any API wrapper: your prompt and whatever you send leave your machine and go through a third party. That's the mechanism, not a bug - but it's worth knowing before you describe anything you'd rather keep private.
For a music-only job it's genuinely pleasant to use: prompt in, MP3-shaped AUDIO out. Just don't expect the kind of full-song structure a Suno gives you - Lyria 2's strength here is score, BGM, and short musical ideas.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A short ambient piano melody with soft warm strings. | — |
| api_keyopt | STRING | — | |
| negative_promptopt | STRING | low quality | — |
| seedopt | INT | 00–65535 | 0 = random seed. FAL seed max is 65535. |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| audio_url | STRING | — |
| response | STRING | — |