Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions cmd/heygen/instant_video_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package main

import (
"encoding/json"
"net/http"
"strings"
"testing"
)

func TestInstantVideoCreateModes(t *testing.T) {
for _, mode := range []string{"text_to_video", "image_to_video", "reference_to_video"} {
t.Run(mode, func(t *testing.T) {
body := map[string]any{"model": "heygen-video-1", "mode": mode, "prompt": "A person waves", "duration": 5}
if mode == "image_to_video" {
body["image"] = map[string]string{"type": "asset_id", "asset_id": "asset-1"}
}
if mode == "reference_to_video" {
body["reference_images"] = []map[string]string{{"type": "asset_id", "asset_id": "asset-1"}}
}
encoded, err := json.Marshal(body)
if err != nil {
t.Fatal(err)
}
requests := 0
server := setupTestServer(t, map[string]testHandler{
"POST /v3/models/videos": {
StatusCode: http.StatusAccepted,
Body: `{"data":{"video_id":"video-1","status":"pending"}}`,
ValidateRequest: func(t *testing.T, r *http.Request) {
requests++
if r.Header.Get("X-Api-Key") != "test-key" {
t.Error("missing API key")
}
if r.Header.Get("Idempotency-Key") != "generation-1" {
t.Error("missing idempotency key")
}
var got map[string]any
if err := json.NewDecoder(r.Body).Decode(&got); err != nil {
t.Fatal(err)
}
if got["mode"] != mode || got["model"] != "heygen-video-1" || got["prompt"] != "A person waves" {
t.Fatalf("unexpected request: %#v", got)
}
if mode == "image_to_video" && got["image"] == nil {
t.Error("first frame missing")
}
if mode == "reference_to_video" && got["reference_images"] == nil {
t.Error("references missing")
}
},
},
})
defer server.Close()
result := runCommand(t, server.URL, "test-key", "model", "videos", "create", "--idempotency-key", "generation-1", "-d", string(encoded))
if result.ExitCode != 0 || result.Stderr != "" {
t.Fatalf("exit=%d stderr=%s", result.ExitCode, result.Stderr)
}
if requests != 1 || !strings.Contains(result.Stdout, `"video_id":"video-1"`) {
t.Fatalf("requests=%d stdout=%s", requests, result.Stdout)
}
})
}
}

func TestInstantVideoGet(t *testing.T) {
server := setupTestServer(t, map[string]testHandler{
"GET /v3/models/videos/video-1": {
StatusCode: http.StatusOK,
Body: `{"data":{"video_id":"video-1","status":"completed","video_url":"https://example.com/result.mp4"}}`,
},
})
defer server.Close()
result := runCommand(t, server.URL, "test-key", "model", "videos", "get", "video-1")
if result.ExitCode != 0 || result.Stderr != "" {
t.Fatalf("exit=%d stderr=%s", result.ExitCode, result.Stderr)
}
if !strings.Contains(result.Stdout, "https://example.com/result.mp4") {
t.Fatalf("missing result URL: %s", result.Stdout)
}
}
6 changes: 6 additions & 0 deletions codegen/examples/folder.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
"POST /v3/folders":
- desc: "Create a folder in the workspace"
cmd: "heygen folder create --name 'Campaign'"
"GET /v3/folders/{folder_id}":
- desc: "Get a folder by its id"
cmd: "heygen folder get <folder-id>"
10 changes: 10 additions & 0 deletions codegen/examples/model.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,13 @@
"DELETE /v3/models/audio/voices/{voice_id}":
- desc: "Delete a voice (rejected while its status is PENDING)"
cmd: "heygen model audio voices delete <voice-id>"
"POST /v3/models/videos":
- desc: "Generate an Instant Video from a text prompt"
cmd: "heygen model videos create -d '{\"model\":\"heygen-video-1\",\"mode\":\"text_to_video\",\"prompt\":\"A person walking through a garden\",\"duration\":5,\"resolution\":\"768p\"}'"
- desc: "Animate a first-frame image"
cmd: "heygen model videos create -d '{\"model\":\"heygen-video-1\",\"mode\":\"image_to_video\",\"prompt\":\"The person smiles and waves\",\"image\":{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}}'"
- desc: "Generate with reference images and reuse an idempotency key for retries"
cmd: "heygen model videos create --idempotency-key <unique-key> -d '{\"model\":\"heygen-video-1\",\"mode\":\"reference_to_video\",\"prompt\":\"The person walks through a garden\",\"reference_images\":[{\"type\":\"asset_id\",\"asset_id\":\"<asset-id>\"}]}'"
"GET /v3/models/videos/{video_id}":
- desc: "Poll an Instant Video until completed, failed, or cancelled"
cmd: "heygen model videos get <video-id>"
87 changes: 87 additions & 0 deletions gen/folder.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading