HiAPI
博客

使用指南

使用 happyhorse-1.1/reference-to-video 通过 hiapi API 制作短视频

给它几张同一个角色的参考图,就能得到一段角色一致的多镜头视频。

2026年11月3日
使用 happyhorse-1.1/reference-to-video 通过 hiapi API 制作短视频

大多数"AI 视频"演示都是一段素材、一个镜头就结束了。一旦你需要同一个角色出现在第二个或第三个镜头里——比如一个吉祥物走进画面,然后狂奔,然后庆祝——文生视频和单图生视频都开始跑偏:每次重新生成,脸不一样、服装不一样、布光也不一样。hiapi API 上的 happyhorse-1.1/reference-to-video 正是为了解决这个具体问题。你给它最多 9 张同一主体的参考图,再加一段描述跨镜头动作的提示词,它就会返回一段连续的单个视频,全程保持主体一致——而不是在剪辑软件里把几段独立动画拼起来的幻灯片。

我们从头到尾实际制作并交付了一段 8 秒、720p 的片段,看看实际效果到底如何:提示词、API 调用、成本和输出。下面是完整过程。

为什么 reference-to-video 是另一种工具

文生视频没有给模型任何可以锚定身份的东西,所以同一个提示词重新生成时,角色的脸和服装都可能变化。单图生视频锚定的是一个姿势,这对单个节拍有效,但一旦你的故事需要第二个角度,或者需要源图从未展示过的动作,就会失效。reference-to-video 介于两者之间:多张参考图让模型从多个真实视角看到同一主体——正面、动作姿势,凡是你提供的都行——并把这些图一起作为身份锚点,让视频可以走过多个节拍而不丢失线索。

这使它适合一种特定且常见的短视频需求:吉祥物讲解片段、常驻角色的社交内容、产品角色叙事——任何同一个"谁"必须在同一个连续镜头里撑过多个"做什么"的场景。

测试案例:一只快递狐狸,三个节拍

我们设计了一个小原创角色——Bramble,一只快递狐狸——并在完全开始做视频之前,先生成两张参考图来确立它的身份。

使用的提示词:"一个名叫 Bramble 的小个子、大眼睛卡通狐狸角色:橙红色毛发,奶油色口鼻和胸口,高耸尖耳且内侧为奶油色,戴青绿色领巾,背着一个破旧的棕色皮革快递挎包,包带上有一枚小圆形蓝色徽章。3D 动画长片风格,柔和暖光,正面朝向镜头的全身转面姿势,纯中性背景,角色设计一致。"

使用的提示词:"同一个狐狸角色 Bramble——橙红色毛发、奶油色口鼻、青绿色领巾、带蓝色徽章的棕色皮革快递挎包——以动态的四分之三侧面动作姿势定格在奔跑中,一只手臂向前摆动,尾巴向后飘动,大而富有表现力的眼睛,与参考设定图相同的 3D 动画长片风格和比例,纯中性背景。"

两张图各花费 $0.03 生成。它们合起来就是整个"选角"步骤——在角色锁定之前,不会发生任何视频调用。

调用 API

reference-to-video 和平台上其他所有模型一样,是基于任务的端点:提交,然后轮询直到完成。

curl -s -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1/reference-to-video",
    "input": {
      "prompt": "Bramble the fox courier picks up a glowing gift box at a warm, lantern-lit delivery station and looks at it with delight; cut to Bramble sprinting through a bustling night market strung with red lanterns, package tucked under one arm, tail flying; cut to Bramble standing proudly on a rooftop at golden-hour sunset, package delivered, looking out over the rooftops with a satisfied smile. Consistent character design throughout, cinematic 3D animated feature style, warm lighting, smooth camera motion.",
      "reference_image": [
        "https://static.hiapi.ai/blog/happyhorse-1-1-reference-to-video-short-form-video/01-bramble-front.png",
        "https://static.hiapi.ai/blog/happyhorse-1-1-reference-to-video-short-form-video/02-bramble-action.png"
      ],
      "duration": 8,
      "resolution": "720p",
      "aspect_ratio": "16:9"
    }
  }'

这会返回一个 taskId。轮询它,直到 status 达到终止状态:

curl -s https://api.hiapi.ai/v1/tasks/<taskId> \
  -H "Authorization: Bearer $HIAPI_API_KEY"

status 会依次经过 queued → handling →(有时)archiving → success 或 fail。成功时,完成的片段是 output[0].url 上的一个限时 URL——立即下载,链接会过期。

我们确认可用的字段

字段 类型 我们用的值 说明
prompt 字符串,必填 3 个节拍的镜头描述 像写迷你分镜列表一样写,而不是一句泛泛的话
reference_image 图片 URL 数组 2 张图片 平台说明每个片段最多支持 9 张
duration 整数,秒 8 happyhorse-1.1 系列范围为 3–15 秒
resolution 字符串 "720p" "1080p" 也可用,价格更高
aspect_ratio 字符串 "16:9" 标准宽高比枚举

结果

观察角色在剪辑点之间的表现:相同的毛色、相同的青绿色领巾、相同的带蓝色徽章挎包,从室内取件到夜市奔跑再到屋顶日落。这正是给它两张参考图而不是一张的全部意义——面对场景切换,模型有比单张静止图更多的东西可以锚定。该片段还会自动内置原生音频;没有单独的音频字段需要配置。

可复用的 Python 示例

import json
import subprocess
import time

def generate_reference_video(prompt, reference_images, token,
                              duration=8, resolution="720p", aspect_ratio="16:9"):
    payload = {
        "model": "happyhorse-1.1/reference-to-video",
        "input": {
            "prompt": prompt,
            "reference_image": reference_images,
            "duration": duration,
            "resolution": resolution,
            "aspect_ratio": aspect_ratio,
        },
    }
    submit = subprocess.run(
        ["curl", "-s", "-X", "POST", "https://api.hiapi.ai/v1/tasks",
         "-H", f"Authorization: Bearer {token}",
         "-H", "Content-Type: application/json",
         "-d", json.dumps(payload)],
        capture_output=True, text=True, check=True,
    )
    task_id = json.loads(submit.stdout)["data"]["taskId"]

    while True:
        poll = subprocess.run(
            ["curl", "-s", f"https://api.hiapi.ai/v1/tasks/{task_id}",
             "-H", f"Authorization: Bearer {token}"],
            capture_output=True, text=True, check=True,
        )
        task = json.loads(poll.stdout)["data"]
        if task["status"] in ("success", "fail"):
            break
        time.sleep(5)

    if task["status"] != "success":
        raise RuntimeError(task.get("error"))
    return task["output"][0]["url"]

成本是多少

项目 成本
参考图(正面) $0.03
参考图(动作姿势) $0.03
8 秒片段 @ 720p($0.16/秒) $1.28
本演示总计 $1.34

720p 为 $0.16/秒;1080p 为 $0.21/秒,所以同样的 8 秒片段在 1080p 下会花费 $1.68。当前完整费率始终在定价页上——在扩大片段长度或分辨率之前先查看那里。

多镜头一致性的提示词技巧

  • 把提示词写成镜头列表,而不是一句话。"节拍 1 → 节拍 2 → 节拍 3",每个节拍都有清晰的动作用,这才真正驱动一个片段内的不同镜头——单一的泛泛描述反而容易模糊成一段连续运动。
  • 自己保证参考图之间视觉一致。模型会保留你的参考图之间已经一致的部分;它不会调和不一致。如果你的正面图和动作图毛色深浅不同或缺少徽章,这种歧义会延续到视频里。
  • 给它一个静止图从未展示过的姿势。多参考图相对于单张的价值在于,模型可以合成超乎任何单张图像所展示的动作和角度——一张正面转面图加一张动作姿势图,足以支撑平静和充满活力的节拍。
  • 明确说明场景变化。提示词中的"切到"、"然后"以及具体地点名称,直接对应你在输出中看到的镜头切换。

常见问题

我可以使用多少张参考图? 每个片段最多 9 张。本演示我们用了 2 张,就足以在三个不同节拍中保持身份。

支持 1080p 吗? 支持——1080p 价格为 $0.21/秒,而 720p 为 $0.16/秒。

如果我只有一张参考图怎么办? 改用 happyhorse-1.1/image-to-video——同一系列,单张起始图,没有多参考图身份锚定。

同一系列有纯文生视频选项吗? 有,happyhorse-1.1/text-to-video,每秒费率相同,适用于你完全没有参考静止图的情况。

输出包含声音吗? 包含,原生音频会随画面自动生成——没有单独的音频参数需要设置。

片段可以多长? happyhorse-1.1 系列为 3 到 15 秒;我们用了 8 秒来呈现一个三节拍叙事。

要点

  • happyhorse-1.1/reference-to-video 把 2-9 张静止图变成一段连续视频,并在每个镜头中保持相同的角色、服装和艺术风格。
  • 一个完整可运行的演示——2 张参考图加一段 8 秒 720p 片段——在 hiapi API 上端到端花费 $1.34。
  • 除提示词外,模型只需要三个字段:reference_image(URL 数组)、duration(3-15 秒)和 resolution(720p 或 1080p)。
  • 把提示词写成镜头列表(节拍 1 → 节拍 2 → 节拍 3),而不是一段泛泛的描述——这才是真正驱动多镜头结构的东西。
  • 原生音频会随视频自动生成,无需单独的音频生成步骤。

准备在你自己的角色上试试吗?从 happyhorse-1.1/reference-to-video 模型页开始,或者看看我们的 Seedance 2.0 Mini 实战教程中的类似短视频工作流。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档