Skip to main content
Pay attention to the complete API response when a request fails. The tips below cover common generation failures and the fastest next action for each case.
Virtual Portrait is the usual choice when you already have permission to use the source material. If an uploaded image or video may contain a real person, add it to a Virtual Portrait Asset Group first, wait for the asset to become active, and then use its asset URI in video generation.Real-Person Verification is intended for situations where another person needs to provide explicit authorization. Create a verification link and send it to that person. After they complete liveness verification, you can upload authorized images, videos, or audio associated with them.In most cases, the Virtual Portrait flow is sufficient. See Generate videos with face assets for the full workflow.
Follow the face asset workflow:
  1. Create or reuse a Virtual Portrait Asset Group.
  2. Add the image or video to the group.
  3. Poll the asset until its status is Active.
  4. Generate with an asset://<ASSET_ID> URI instead of the original media URL.
Try these steps:
  • Explicitly request fully original background music that does not imitate copyrighted works.
  • Describe the music style, mood, and atmosphere—for example, calm, expressive, and emotionally resonant.
  • Revise the prompt and regenerate. Audio is created anew each time, so retrying the same prompt may also resolve the issue.
For a more reliable workaround:
  • Disable controls.generateAudio if you do not need background music.
  • Provide royalty-free audio that you are permitted to use as an Audio input. This avoids relying on newly generated music and its copyright checks.
Save the complete JSON response, HTTP status, request time, and task ID if one was returned. Send those details to your administrator or support contact, but never include your API key.See Errors for the standard error envelope and retry guidance.
When reporting a failed asynchronous task, include the public GENGEN task ID. It helps identify the task without exposing your API key or upstream provider credentials.