Environment Detection
Before generating anything, determine the rendering mode.
Run bash scripts/setup.sh from the skill directory to auto-detect, or check manually:
No |
Cloud Render -- read
cloud-render.md |
| Yes | Yes |
Local Render (recommended) -- read
local-render.md |
INLINECODE1 is required for all modes. Get one at https://varg.ai
Critical Rules
Everything you know about varg is likely outdated. Always verify against this skill and its references before writing code.
- 1. Never guess model IDs -- consult models.md for current models, pricing, and constraints.
- Function calls for media, JSX for composition --
Image({...}) creates media, <Clip> composes timeline. Never write <Image prompt="..." />. - Cache is sacred -- identical prompt + params = instant $0 cache hit. When iterating, keep unchanged prompts EXACTLY the same. Never clear cache.
- One image per Video --
Video({ prompt: { images: [img] } }) takes exactly one image. Multiple images cause errors. - Duration constraints differ by model -- kling-v3: 3-15s (integer only). kling-v2.5: ONLY 5 or 10. Check models.md.
- Gateway namespace -- use
providerOptions: { varg: {...} }, never fal, when going through the gateway (both modes). - Renders cost money -- 1 credit = 1 cent. A typical 3-clip video costs $2-5. Use preview mode (local) or cheap models to iterate.
Quick Start
Cloud Render (no bun/ffmpeg needed)
CODEBLOCK0
Full details: cloud-render.md
Local Render (bun + ffmpeg)
CODEBLOCK1
CODEBLOCK2
Full details: local-render.md
Single Asset (no video composition)
For one-off images, videos, speech, or music without building a multi-clip template:
CODEBLOCK3
Full API reference: gateway-api.md
How to Write Video Code
Video code has two layers: media generation (function calls) and composition (JSX).
CODEBLOCK4
Component Summary
| Component | Type | Purpose |
|---|
| INLINECODE8 | Function call | Generate still image |
| INLINECODE9 |
Function call | Generate video (text-to-video or image-to-video) |
|
Speech() | Function call | Text-to-speech audio |
|
<Render> | JSX | Root container -- sets width, height, fps |
|
<Clip> | JSX | Timeline segment -- duration, transitions |
|
<Music> | JSX | Background audio (always set
duration!) |
|
<Captions> | JSX | Subtitle track from Speech |
|
<Title> | JSX | Text overlay |
|
<Overlay> | JSX | Positioned layer |
|
<Split> /
<Grid> | JSX | Layout helpers |
Full props: components.md
Provider Differences (Cloud vs Local)
| Cloud Render | Local Render |
|---|
| No imports needed | INLINECODE20 |
| INLINECODE21 |
varg.imageModel("nano-banana-pro") |
|
fal.videoModel("kling-v3") |
varg.videoModel("kling-v3") |
|
elevenlabs.speechModel("eleven_v3") |
varg.speechModel("eleven_v3") |
| Globals are auto-injected | Must call
createVarg() |
When to Use Which Provider
| Scenario | Use | Auth |
|---|
| New project, simplest setup | INLINECODE28 (gateway) | INLINECODE29 only |
| Existing project with fal/elevenlabs keys |
fal.*Model() /
elevenlabs.*Model() | Individual keys |
| Cloud render via curl/API | Gateway (only option) |
VARG_API_KEY |
| Need $0 billing with own keys | Gateway + BYOK headers |
VARG_API_KEY + provider keys |
| Specific provider feature not in gateway | Direct provider | Individual key |
Default recommendation: Use the gateway (varg.*Model() + VARG_API_KEY). It handles routing, caching, billing, and works with a single key.
Cost & Iteration
- - 1 credit = 1 cent. nano-banana-pro = 5 credits, kling-v3 = 150 credits, speech = 20-25 credits.
- Cache saves money. Keep unchanged prompts character-for-character identical across iterations.
- Preview first (local mode only):
--preview generates free placeholders to validate structure. - Full pricing: models.md
References
Load these on demand based on what you need:
| Need | Reference | When to load |
|---|
| Render via API | cloud-render.md | No bun/ffmpeg, or user wants cloud rendering |
| Render locally |
local-render.md | bun + ffmpeg available |
| Patterns & workflows |
recipes.md | Talking head, character consistency, slideshow, lipsync |
| Model selection |
models.md | Choosing models, checking prices, duration constraints |
| Component props |
components.md | Need detailed props for any component |
| Better prompts |
prompting.md | User wants cinematic / high-quality results |
| REST API |
gateway-api.md | Single-asset generation or Render API details |
| Debugging |
common-errors.md | Something failed or produced unexpected results |
| Full examples |
templates.md | Need complete copy-paste-ready templates |
| BYOK keys |
byok.md | Using your own provider API keys for $0 billing |
环境检测
在生成任何内容之前,先确定渲染模式。
从技能目录运行 bash scripts/setup.sh 进行自动检测,或手动检查:
无 |
云端渲染 -- 阅读
cloud-render.md |
| 有 | 有 |
本地渲染(推荐)-- 阅读
local-render.md |
所有模式都需要 VARGAPIKEY。在 https://varg.ai 获取。
关键规则
你所了解的关于 varg 的信息可能已经过时。在编写代码前,务必对照本技能及其参考资料进行验证。
- 1. 切勿猜测模型 ID -- 查阅 models.md 了解当前模型、定价和约束。
- 媒体用函数调用,合成用 JSX -- Image({...}) 创建媒体, 编排时间线。切勿编写 。
- 缓存至关重要 -- 相同的提示词 + 参数 = 即时 $0 缓存命中。迭代时,保持未更改的提示词完全一致。切勿清除缓存。
- 每个视频一张图片 -- Video({ prompt: { images: [img] } }) 只接受一张图片。多张图片会导致错误。
- 时长限制因模型而异 -- kling-v3:3-15秒(仅整数)。kling-v2.5:仅限 5 或 10。查阅 models.md。
- 网关命名空间 -- 通过网关(两种模式)时,使用 providerOptions: { varg: {...} },切勿使用 fal。
- 渲染需要付费 -- 1 积分 = 1 美分。一个典型的 3 片段视频花费 $2-5。使用预览模式(本地)或廉价模型进行迭代。
快速开始
云端渲染(无需 bun/ffmpeg)
bash
提交 TSX 代码到渲染服务
curl -s -X POST https://render.varg.ai/api/render \
-H Authorization: Bearer $VARG
APIKEY \
-H Content-Type: application/json \
-d {code: const img = Image({ model: fal.imageModel(\nano-banana-pro\), prompt: \a cabin in mountains at sunset\, aspectRatio: \16:9\ });\nexport default (
{img});}
轮询结果(重复直到 completed 或 failed)
curl -s https://render.varg.ai/api/render/jobs/JOB_ID \
-H Authorization: Bearer $VARG
APIKEY
完整详情:cloud-render.md
本地渲染(bun + ffmpeg)
tsx
/ @jsxImportSource vargai */
import { Render, Clip, Image } from vargai/react
import { createVarg } from @vargai/gateway
const varg = createVarg({ apiKey: process.env.VARGAPIKEY! })
const img = Image({
model: varg.imageModel(nano-banana-pro),
prompt: a cabin in mountains at sunset,
aspectRatio: 16:9
})
export default (
{img}
)
bash
bunx vargai render video.tsx --preview # 免费预览
bunx vargai render video.tsx --verbose # 完整渲染(消耗积分)
完整详情:local-render.md
单个资源(无视频合成)
用于一次性生成图像、视频、语音或音乐,无需构建多片段模板:
bash
curl -X POST https://api.varg.ai/v1/image \
-H Authorization: Bearer $VARGAPIKEY \
-d {model: nano-banana-pro, prompt: a sunset over mountains}
完整 API 参考:gateway-api.md
如何编写视频代码
视频代码包含两层:媒体生成(函数调用)和合成(JSX)。
tsx
// 1. 通过函数调用生成媒体
const img = Image({ model: ..., prompt: ... })
const vid = Video({ model: ..., prompt: { text: ..., images: [img] }, duration: 5 })
const voice = Speech({ model: ..., voice: rachel, children: Hello! })
// 2. 通过 JSX 树进行合成
export default (
{vid}
Welcome
)
组件摘要
| 组件 | 类型 | 用途 |
|---|
| Image() | 函数调用 | 生成静态图像 |
| Video() |
函数调用 | 生成视频(文本转视频或图像转视频) |
| Speech() | 函数调用 | 文本转语音音频 |
|
| JSX | 根容器 -- 设置宽度、高度、帧率 |
| | JSX | 时间线段落 -- 时长、转场 |
| | JSX | 背景音频(务必设置 duration!) |
| | JSX | 来自 Speech 的字幕轨道 |
| | JSX | 文字叠加 |
| | JSX | 定位图层 |
| / | JSX | 布局辅助工具 |
完整属性:components.md
提供商差异(云端 vs 本地)
| 云端渲染 | 本地渲染 |
|---|
| 无需导入 | import { ... } from vargai/react |
| fal.imageModel(nano-banana-pro) |
varg.imageModel(nano-banana-pro) |
| fal.videoModel(kling-v3) | varg.videoModel(kling-v3) |
| elevenlabs.speechModel(elevenv3) | varg.speechModel(elevenv3) |
| 全局变量自动注入 | 必须调用 createVarg() |
何时使用哪个提供商
| 场景 | 使用 | 认证 |
|---|
| 新项目,最简设置 | varg.Model()(网关) | 仅 VARGAPIKEY |
| 已有 fal/elevenlabs 密钥的现有项目 |
fal.Model() / elevenlabs.*Model() | 各自的密钥 |
| 通过 curl/API 进行云端渲染 | 网关(唯一选项) | VARGAPIKEY |
| 需要用自己的密钥实现 $0 计费 | 网关 + BYOK 头 | VARGAPIKEY + 提供商密钥 |
| 网关中不支持的特定提供商功能 | 直接提供商 | 各自的密钥 |
默认推荐:使用网关(varg.*Model() + VARGAPIKEY)。它处理路由、缓存、计费,并且只需一个密钥即可工作。
成本与迭代
- - 1 积分 = 1 美分。 nano-banana-pro = 5 积分,kling-v3 = 150 积分,语音 = 20-25 积分。
- 缓存节省成本。 在迭代过程中,保持未更改的提示词逐字逐句一致。
- 先预览(仅限本地模式):--preview 生成免费占位符以验证结构。
- 完整定价:models.md
参考资料
根据需求按需加载:
local-render.md | 有 bun + ffmpeg |
| 模式与工作流 | recipes.md | 人物讲话、角色一致性、幻灯片、口型同步 |
| 模型选择 | models.md | 选择模型、查看价格、时长限制 |
| 组件属性 | components.md