Comfy-Org/ComfyUI · error · ValueError
HeyGen did not return a translation ID: {created}
Error message
HeyGen did not return a translation ID: {created} What it means
Thrown after POSTing a video-translation request to HeyGen when the response's data.video_translation_ids list is empty. The node requires at least one translation id to poll GET /v1/video_translation/{id}; an empty list means HeyGen accepted the HTTP call but created no translation job.
Source
Thrown at comfy_api_nodes/nodes_heygen.py:674
) -> IO.NodeOutput:
video_url = await upload_video_to_comfyapi(cls, video)
payload = {
"video": {"type": "url", "url": video_url},
"output_languages": [output_language],
"mode": mode,
"translate_audio_only": translate_audio_only,
"title": "ComfyUI Video Translate",
}
if speaker_count > 0:
payload["speaker_num"] = speaker_count
created = await sync_op_raw(
cls,
ApiEndpoint(path=_TRANSLATIONS_PATH, method="POST"),
data=payload,
)
translation_ids = (created.get("data") or {}).get("video_translation_ids") or []
if not translation_ids:
raise ValueError(f"HeyGen did not return a translation ID: {created}")
final = await poll_op_raw(
cls,
ApiEndpoint(path=f"{_TRANSLATIONS_PATH}/{translation_ids[0]}"),
status_extractor=lambda r: (r.get("data") or {}).get("status"),
queued_statuses=["pending"],
poll_interval=5.0,
)
data = final["data"]
if not data.get("video_url"):
raise ValueError(f"HeyGen returned no video_url for translation {translation_ids[0]}.")
return IO.NodeOutput(await download_url_to_video_output(data["video_url"]))
class HeyGenTextToSpeechNode(IO.ComfyNode):
"""Synthesize speech audio from text with HeyGen's Starfish TTS engine."""
@classmethod
def define_schema(cls) -> IO.Schema:View on GitHub (pinned to 1c6d8d45b3)
Solutions
- Check the full response body in the message for a HeyGen error/status field
- Confirm the source video actually contains audible speech
- Verify the target language is supported by HeyGen video translate
- Check account quota/permissions for translation features
Defensive patterns
Strategy: try-catch
Try / catch
try:
await translate_video(...)
except ValueError as e:
if 'did not return a translation ID' in str(e):
# empty video_translation_ids: check language support / speech presence in embedded body
raise Prevention
- Ensure the source video has a clear speech track before translating
- Verify target language is in HeyGen's supported translation list
When it happens
Trigger: HeyGen returns 2xx with empty video_translation_ids — commonly when the submitted video/language pair is rejected server-side (unsupported language, unanalyzable audio) or when an account/quota guard silently skips job creation.
Common situations: Videos with no speech track, unsupported target languages, region-locked accounts, or upstream schema/policy changes to the translations endpoint.
Related errors
- HeyGen did not return a video_id: {created}
- HeyGen returned no video_url for translation {translation_id
- HeyGen returned no video_url for video {video_id}.
- HeyGen did not return an avatar: {created}
- HeyGen did not return an audio_url: {response}
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/c0f7595e99992544.
Report an issue: GitHub.