Troubleshooting
Running into an issue? Check the common problems and solutions below. Most issues can be resolved quickly with the right steps.
Why am I getting a 401 Unauthorized error?
A 401 error means your API key is missing or invalid. To fix this:
- Make sure you’re including the
x-api-keyheader in every API request - Verify your API key is correct — copy it directly from Settings > API Keys
- If your key still doesn’t work, regenerate a new one in the Sync Labs Studio
See the Authentication guide for full details on setting up your API key.
My generation is stuck in PENDING
PENDING means the job is queued, not that it has failed. Queue and processing times depend on the model, video length, resolution, and current load. See Generation Times & Performance for model-specific estimates. If your generation appears stuck:
- Use polling or webhooks to check the current status
- Wait at least 2 minutes before assuming something is wrong — longer videos take more time
- If a generation is still in PENDING after 5 minutes, contact support at support@sync.so
Avoid re-submitting the same job repeatedly, as this may increase queue times.
I'm hitting 429 Rate Limit errors
A 429 can indicate a request-rate limit or your plan’s generation concurrency limit. Check the response body and headers before retrying.
- For
rate_limit_exceeded, wait for the reported retry interval and use exponential backoff. - For
concurrency_limit_reached, wait for an active generation to finish. CheckRetry-After,X-Sync-Concurrency-Limit, andX-Sync-Active-Generationswhen present. - Use List Generations to inspect active jobs and Concurrency & Rate Limits to understand the limits.
- Use the Batch API for eligible large workloads.
The lip sync quality is poor
Output quality depends heavily on your input video, audio, and model choice. For best results, ensure the speaker’s face is front-facing, well-lit, and occupies a reasonable portion of the frame at a minimum of 480p resolution. Avoid obstructions like hands, microphones, or hair covering the mouth area. Use clean audio without background music or overlapping speakers, as noise degrades lip-to-audio alignment. For model selection, lipsync-2 handles the majority of videos well and preserves natural speaking style, while lipsync-2-pro uses diffusion-based super resolution for the best results with beards, teeth, and fine facial detail. For longer videos, audio-video duration mismatches can cause drift — use the sync_mode parameter (e.g., cut_off, bounce, or remap) to control how mismatches are handled.
See Media Content Tips for detailed guidance on input quality.
Output colors look different or seams appear after compositing
For color-sensitive pipelines, especially when you composite Sync Labs output back onto the original source, use SDR BT.709 input with explicit color tags and prefer H.264 yuv444p (4:4:4) instead of yuv420p (4:2:0) or yuv422p (4:2:2). Sync Labs processes frames in RGB, so 4:2:0 and 4:2:2 input requires chroma upsampling during YUV to RGB conversion and can make small color shifts more visible at composite boundaries. H.264 outputs are re-encoded and may not preserve the original bitrate exactly; matching bitrate is not a reliable fix for color differences. See Preserving Color During Generation for recommended export settings.
My media format is not supported
Sync Labs supports a wide range of video and audio formats. If your file isn’t accepted:
- Check the Media Formats Support page for the full list of supported formats
- Convert your file using FFmpeg:
My webhook isn't receiving events
If your webhook endpoint isn’t getting called:
- HTTPS required — Your endpoint must be a publicly accessible HTTPS URL
- Check firewall rules — Make sure incoming POST requests from Sync Labs’ servers aren’t blocked
- Verify the URL — Double-check the webhook URL you passed in your API call
- Test locally — Use a tool like ngrok to expose a local server for testing
- Check response codes — Your endpoint must return a 2xx status code to acknowledge receipt
Python SDK installation fails
If you’re having trouble installing the Python SDK:
- Check your Python version — The SDK requires Python 3.8 or higher
- Upgrade the package — Try reinstalling with the latest version:
- Use a virtual environment — Avoid conflicts with other packages:
See the Python SDK Guide for full setup instructions.
TypeScript SDK issues
If the TypeScript SDK isn’t working as expected:
- Check your Node.js version — The SDK requires Node.js 18 or higher
- Reinstall the package:
- Check your package.json — Make sure
@sync.so/sdkis listed in your dependencies - TypeScript version — Ensure you’re using TypeScript 4.7 or higher if using TypeScript
See the TypeScript SDK Guide for full setup instructions.
Output has watermarks
Watermarks appear on free accounts and watermark-required plans. To access clean outputs:
- Upgrade to Creator or higher on usage billing, or Starter or higher on credit billing.
- See our Billing page for plan details and pricing
- Eligible existing videos use the clean output automatically when it is available; regeneration is not needed for those videos. Refresh Studio after upgrading.
Face not detected or wrong face selected
If Sync Labs can’t detect a face or selects the wrong person:
- Ensure face is clearly visible — The face should be unobstructed, well-lit, and occupy a reasonable portion of the frame
- Check face angle — Frontal or near-frontal faces work best; extreme side profiles may not be detected
- Multi-person videos — If there are multiple faces in the frame, use the Speaker Selection feature to target the correct person
- Resolution — Very low-resolution video may make face detection unreliable; use at least 480p
See the Speaker Selection guide for details on selecting specific faces in multi-person videos.
How long does generation take and what if it seems stuck?
Generation time depends on the model, video length, resolution, and queue load. Check Generation Times & Performance for model-specific estimates; sync-3 and longer clips can normally take more than 10 minutes. Elapsed time alone does not establish an infrastructure failure. Monitor the status field with polling or use webhooks. If the job runs well past its estimate, check service status and contact support@sync.so with the generation ID, model, and elapsed time. Avoid resubmitting while the original job is still PENDING or PROCESSING, since a new request does not cancel it.
I have a billing or payment issue — what should I do?
If a payment fails, update your payment method at sync.so/billing/subscription and retry it. If generations pause because of an unpaid invoice, open the Billing page and pay it. Check your usage history at sync.so/billing/usage if you do not recognize a charge. For refund requests, open the Billing page and select Manage billing and payment methods. For any billing issue that the dashboard does not resolve, email support@sync.so. See the Billing page for full pricing and payment details.
Why does the lip sync look mismatched or out of sync on longer videos?
Lip sync drift on longer videos typically happens when the audio and video durations do not match precisely, or when the video contains segments where the speaker is not actively talking. Scene changes or cuts can make face tracking harder. To fix drift, set the sync_mode parameter to cut_off (uses the shorter input duration) or remap (adjusts video speed to match audio). For videos over 1 minute with multiple scenes, consider splitting them into segments using the Segments API, where each segment gets its own audio input for tighter control. Using lipsync-2-pro also improves quality in challenging footage. Ensure the input video shows the speaker actively talking throughout — static or still frames cannot produce good lip movements.
My text-to-speech generation failed or produced no audio
TTS works out of the box on all plans using Sync Labs’ built-in ElevenLabs integration — no setup required. If you want more control, you can optionally bring your own ElevenLabs API key on Creator plans and above by configuring it at Integrations settings. TTS failures most commonly stem from an invalid ElevenLabs voice ID or exceeding the 5,000-character script limit. Verify your voiceId is a valid ElevenLabs voice ID string (not a voice name or display label), and keep your script under 5,000 characters per generation request. For longer scripts, use the Segments API to split text across multiple TTS inputs with different time ranges. If the generation completes but produces audio-only output without video, ensure you included a valid video input in your request alongside the TTS input. For persistent generation_text_length_exceeded or generation_input_validation_failed errors, see the Error Handling page for detailed resolution steps.
My video or audio file won't upload or is rejected
Sync Labs accepts MP4, MOV, WebM, and AVI for video, and WAV, MP3, OGG, FLAC, ALAC, and MP4 audio with full support (WMA, M4A, and AAC have limited support due to licensing restrictions). If your file is rejected, first check the format against the Media Formats Support page. When using a url input, provide a publicly reachable URL that returns media bytes, not an HTML sharing or preview page. Private, authenticated, or expired URLs can fail. For local files or private media, use Asset Uploads and pass the returned assetId. The recommended video codec is H.264 (High Profile) at a maximum resolution of 4K (4096x2160 pixels); videos above 4K are rejected outright. Audio should use a 44.1kHz or 48kHz sample rate for best results. If your file uses an unsupported codec, convert it with FFmpeg: ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4. Videos missing an audio track or required metadata fields (duration, frame rate) will return a generation_media_metadata_missing error. Note that HDR (10-bit color) video is automatically normalized to SDR, which may alter your color grading.
How do I lip sync a video with multiple speakers?
For videos with multiple people visible in the frame, use the Speaker Selection feature to target the correct face. Set options.active_speaker_detection.auto_detect to true to let Sync Labs automatically identify the active speaker, or provide a manual frame_number and coordinates pointing to the target speaker’s face for fully deterministic control. You can also supply per-frame bounding_boxes if you already run your own face detection. If your video has multiple speakers talking at different times (such as a two-person podcast or interview), use the Segments API to assign different audio inputs to different time ranges within the video — each segment can target a different speaker with its own audio. For best results, ensure each speaker’s face is clearly visible and front-facing during their speaking segment. If Sync Labs selects the wrong face, provide explicit coordinates rather than relying on auto-detection. See the Speaker Selection API guide and Segments guide for complete code examples.
Can I download subtitles for my result?
On a finished Studio result, select Generate subtitles to download an .srt file. Load it in your video player or editor. Subtitles are not burned into the video. Videos with no speech, no audio track, or a duration over 60 minutes cannot be subtitled. The button explains unavailable states; retry it after a temporary failure.
How do I change my profile picture?
Open Settings > General. In profile picture, paste an HTTPS link to a hosted image and select save. The link must be no more than 1,024 characters. Image uploads and removing the picture are not supported. If saving fails, your previous picture remains.
How do I hear a voice before generating speech?
Choose a voice and select Preview to hear its sample. Select Stop to end playback. Previewing the sample does not generate speech or change your script. Use Generate speech to create audio from your script. If Preview is unavailable, its tooltip explains why.
How do I download generated speech?
Select Download audio beside the finished speech preview to save the existing take. Downloading keeps the audio attached and does not regenerate it. Saved audio is also available from your Studio Library.
Where are my earlier speech takes?
The Studio Pro Voice panel saves completed speech takes in Assets. Open Assets to reuse an earlier take. Apply adds the latest saved take without creating another copy. For an unsaved project, look under All Projects until you apply the take.
Still Need Help?
If your issue isn’t covered above, here are more resources:
- Error Handling Guide — Detailed error code reference and resolution steps
- Billing — Subscription plans, usage-based billing, refunds, and payment troubleshooting
- Media Formats Support — Full list of supported video and audio formats
- Media Content Tips — Best practices for input video and audio quality
- Text-to-Speech Guide — ElevenLabs integration setup and TTS troubleshooting
- Speaker Selection — Target specific faces in multi-person videos
- Segments Guide — Multi-segment lip sync for long-form and multi-speaker content
- API Reference — Complete endpoint documentation
- Email support — Reach us at support@sync.so
- Discord Community — Get help from the Sync Labs community and team
Support Knowledge Base
For step-by-step walkthroughs and additional troubleshooting, visit the Sync Labs Support Knowledge Base:
- Why is my lip sync not working? — No mouth movement or static face
- [How to use TTS with Sync Labs](https://support.sync.so/articles/1245054903-How-to-use-Text-to-Speech-(TTS)-with-Sync Labs) — Step-by-step text-to-speech setup
- Generation taking too long? — Processing times and stuck jobs
- Upload errors — File format and upload troubleshooting
- Failed payments — Card declined and payment issues
- Unpaid invoices — Debt payment and blocked generations
- How to cancel — Step-by-step cancellation guide
- How to get a refund — Refund eligibility and process

