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

  1. Check the full response body in the message for a HeyGen error/status field
  2. Confirm the source video actually contains audible speech
  3. Verify the target language is supported by HeyGen video translate
  4. 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

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


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/c0f7595e99992544. Report an issue: GitHub.