sync.so lipsync – api key
The API key node that turns sync.so into your lipsync backend
- api_key
The name is a small lie: this node doesn't call any API and needs no key of its own to function. What it does is hold your sync.so API key and pass it along, so the rest of the pack can actually pay for the lipsync job. It's the credential node in the "sync.so lipsync" pack from synchronicity-labs/sync-comfyui, and it's the first thing you'll wire up - because without a key, the whole thing refuses to run.
The wider point is worth being clear about before you start: this isn't a local model. The sync-comfyui pack is a thin wrapper around sync.so, a hosted lipsync API from the same people who brought you Wav2Lip. Your video and audio get uploaded to their servers, they do the lip-syncing on their GPUs, and your machine downloads the result. No model files, no VRAM pressure - but also no offline mode, and every generation costs credits. That tradeoff is exactly why a key node exists.
How it works
Mechanically, SyncApiKeyNode is almost insultingly simple. It exposes one api_key STRING input, default empty, and passes it through to a single SYNC_API_KEY output:
def provide_api_key(self, api_key):
return ({"api_key": api_key},)
That's the whole node. The string rides inside a typed dict to the SyncLipsyncMainNode, which pulls it back out, stuffs it into an x-api-key header, and sends it to https://api.sync.so/v2/generate. Your key never touches ComfyUI's storage - it just lives in the graph while the workflow runs, which is the right call for a credential you're sharing with a third-party API.
The one input that matters
- api_key - paste the key from your sync.so dashboard (API settings → copy your API key). There's no built-in validation here; if you leave it blank, the main node bails with
Error: API key is required. Typos get you a 401 from the API mid-job.
That's genuinely it. No optional inputs, no output node status. You set it, you connect it to the generate node, done.
Installing the pack
The key node ships with the rest of the pack, so you're installing all of it at once:
cd ComfyUI/custom_nodes
git clone https://github.com/synchronicity-labs/sync-comfyui
cd sync-comfyui
pip install -r requirements.txt
Then restart ComfyUI. Easier: use ComfyUI Manager and search for sync-comfyui (or just "sync") - the registry name for the same install is comfyui-sync-lipsync-node, which the README also mentions as comfy node install comfyui-sync-lipsync-node. The requirements pull in syncsdk, opencv-python-headless, librosa, soundfile, and torch - the torch and numpy bits you almost certainly already have, but the audio/vision libs are new and worth letting install rather than skipping.
Common issues
- "API key is required" even though you pasted one - you connected the key node's output to the main node but left the widget empty, or the connection is dangling. The main node reads the value from the node, not from anywhere else.
- 401 errors at the API - the key is stale, mistyped, or your account has no credits. The node gives you zero feedback at its own level; the error surfaces when the generate node hits sync.so. Check the key in the dashboard and confirm your plan actually includes lipsync credits.
If you're on the fence about a paid cloud lipsync at all: the community consensus is that sync.so's quality is genuinely good for talking-head avatars (it's built on Wav2Lip lineage), with the caveats that output is around 25fps and the pricing adds up fast. A key node is only worth having if you've already decided the subscription is.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| api_key | SYNC_API_KEY | — |