scenario-fan-cam

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Scenario Fan Cam

Scenario 粉丝镜头

Overview

概述

A fan cam is a two-stage build: an identity-preserving image edit places the person into a 16:9 broadcast still, and image-to-video animates the approved still into a reaction. The uploaded photo is an identity reference, never a start frame: feeding it straight to a video model animates a portrait, not a broadcast. Stage one is cheap and stage two is not, so the still carries every decision worth approving.
Use only photos of the user or of people who gave them permission; refuse celebrity or stranger insertions. Real faces also trip provider filters more than most subjects: on a block, see
scenario-moderation
. Connection and the core loop: see the
scenario
skill in this repo. If a sibling skill named here is missing from your available skills, ask the user to install it (
npx skills add scenario-labs/skills --skill <name>
); unattended, proceed from tool schemas and flag the gap.
粉丝镜头制作分为两个阶段:首先通过身份保留型图像编辑将人物合成到16:9的直播静态画面中,再通过图生视频技术将审核通过的静态画面生成带有反应的动态视频。上传的照片仅作为身份参考,绝不能作为起始帧:直接将照片输入视频模型生成的是人像动态效果,而非直播画面。第一阶段成本较低,第二阶段成本较高,因此静态画面需要确认所有关键决策后再进入下一步。
仅可使用用户本人或已获得授权的人物照片,拒绝合成名人或陌生人的画面。真实人脸比大多数主体更容易触发服务商的内容过滤机制:若遇到拦截,请参考
scenario-moderation
。连接方式与核心流程请参考本仓库中的
scenario
技能。如果你的可用技能中缺少此处提到的关联技能,请让用户安装(命令:
npx skills add scenario-labs/skills --skill <name>
);若处于无人值守模式,可基于工具架构继续执行并标记缺失的技能。

Quick reference

快速参考

Discover members with
recommend
, passing the stage's capability and the user's own words: it ranks by measured cost and latency and names the purpose-built pick, where a capability-worded
search
returns hundreds of keyword hits with nothing to choose between them. Read
next_step
before taking a pick, per the
scenario
skill. Keep
search
for a member you can already name. Never assert a generative model's id as a constant. Scenario's own single-purpose tool models are named outright below: there is exactly one of each, so discovering them would only re-derive a constant.
StageWhat happensDetail
1. Identity stillImage-edit member (
img2img
) composites the person into a 16:9 crowd frame
scenario-image
,
scenario-consistency
2. Still gateLikeness checked against the photo before any video money is spent
scenario-asset-analysis
3. AnimateImage-to-video from the approved still, reaction beats, one camera move
scenario-kling
,
scenario-video
4. Identity gateFrames extracted from the clip, compared to the approved still
scenario-asset-analysis
5. OverlaysScore strip, channel bug, lower third composited as post layers, never generated
scenario-text-overlay
,
scenario-video-assembly
6. Derivatives9:16 and 1:1 social cuts off the 16:9 master
scenario-formats
Broadcast grammar is what sells the shot, so prompt it explicitly at both stages: long-lens compression with the crowd defocused in front and behind, harsh stadium floodlight or arena strobe, slight motion blur, the camera hunting and reframing as it finds the subject. Keep the person mid-ground among other fans, off-center, at broadcast camera height. A centered, well-lit, eye-level subject reads as a photoshoot in a stadium, not a cutaway.
Give the reaction an arc rather than a state: oblivious, then noticing the camera or the screen, then the reaction the user asked for (cheering, laughing, disbelief, heartbreak). Multi-beat prompting per the video family's contract keeps the turn inside one clip.
使用
recommend
查找可用组件,传入对应阶段的能力需求和用户的原始描述:它会根据实测成本和延迟排序,并推荐专用方案;而按能力关键词使用
search
会返回数百个匹配结果,难以区分优劣。根据
scenario
技能的要求,选择方案前请先阅读
next_step
。仅当你已经知道具体组件名称时才使用
search
。绝不要将生成式模型的ID当作常量使用。Scenario自带的专用工具模型已在下方明确列出:每种仅有一个,因此查找它们只会得到固定结果。
阶段执行内容相关技能
1. 身份静态画面图像编辑组件(
img2img
)将人物合成到16:9的人群画面中
scenario-image
,
scenario-consistency
2. 静态画面审核在产生视频生成成本前,对照原照片检查人像相似度
scenario-asset-analysis
3. 动态生成基于审核通过的静态画面生成视频,包含反应节拍和一次镜头移动
scenario-kling
,
scenario-video
4. 身份一致性校验从视频中提取帧,与审核通过的静态画面对比
scenario-asset-analysis
5. 叠加层计分条、频道台标、底部字幕条作为后期图层合成,绝不通过生成得到
scenario-text-overlay
,
scenario-video-assembly
6. 衍生版本基于16:9主版本裁剪出9:16和1:1的社交平台版本
scenario-formats
直播画面的真实感来自专业的镜头语言,因此两个阶段都要在提示词中明确说明:使用长焦镜头压缩空间,前后景人群虚化,体育场泛光灯或场馆频闪灯的强烈光照,轻微的运动模糊,镜头找到主体时的对焦和重新构图过程。将人物放在其他粉丝中间的中景位置,偏离画面中心,高度与直播摄像机齐平。如果主体居中、光线良好、处于视线水平,看起来就像是在体育场拍的写真,而不是直播切镜。
给反应设计一个情绪弧光,而非单一状态:先是毫无察觉,然后注意到镜头或屏幕,最后做出用户要求的反应(欢呼、大笑、难以置信、心碎)。按照视频类技能的规范使用多节拍提示词,可以让情绪转变在单个视频片段内完成。

Worked example: caught on the stadium screen, 8 seconds

实操示例:被体育场大屏拍到,8秒

  1. Collect the photo, the sport or event, venue mood, wardrobe, and the wanted reaction.
    upload_asset
    the photo once and reuse the returned asset id.
  2. Create this run's collection before the first generation (
    collection_create
    , catalog write lane,
    name
    only), then
    collection_add_assets
    each keeper as it lands; its returned
    itemCount
    is the receipt.
  3. recommend
    with
    capability="img2img"
    and the placement described in words; prefer a ranked entry that takes several reference images, and read
    model_schema_get
    for those inputs (
    scenario-image
    for the lane,
    scenario-consistency
    for reference discipline).
  4. Edit prompt: "the person from the reference image seated mid-crowd at a floodlit football stadium, 16:9 television cutaway, long-lens crowd compression, no text, logos, or graphics in frame". Keep the plate text-free: overlays come later.
  5. Gate the still:
    asset_display
    it for approval, and inventory the likeness features that must hold (face geometry, hairline, skin tone, wardrobe) with the analysis lane from
    scenario-asset-analysis
    ; a change in any inventoried feature fails. Unattended, that inventory stands in for the user's sign-off.
  6. recommend
    with
    capability="img2video"
    and the reaction described in words, then check the pick against
    scenario-kling
    or
    scenario-video
    . The brief's length filters members:
    duration
    is usually a fixed enum a member either reaches or does not, and the tiers that reach it sit far apart on price, so
    model_schema_get
    each candidate and compare with
    model_run
    dry_run=true
    .
  7. Run with the approved still as the start image and two beats: "she chats, unaware" then "she spots herself on the stadium screen, stands, and cheers", one slow reframing move,
    wait=false
    , then
    jobs_wait
    re-called with
    pending_job_ids
    on timeout, never a second
    model_run
    .
  8. Check the clip against the approved still on frames the platform produced: the free
    firstFrame
    and
    lastFrame
    off
    asset_get
    first, then
    model_scenario-video-to-image-seq
    for a mid-clip frame (a tool-model lane per
    scenario-video-editing
    ). A local extraction is not a substitute at any budget, because it yields no asset to file or audit and the gate stops being traceable. A change in any inventoried feature fails the clip, and so does legible generated type: ribbon boards and jumbotron glyphs creep in even against a no-text prompt, worst late in the clip. The retry starts from the same still, never from the drifted output.
  9. Assemble on-platform with
    model_scenario-compose-video
    (a tool-model lane per
    scenario-video-assembly
    ), layering the score strip and channel bug from
    scenario-text-overlay
    in the safe corners; a local editor is the wrong lane. Give every overlay layer an explicit
    width
    and
    height
    , since leaving them empty is documented as native size and does not hold, and pin
    durationMode: "custom"
    to the clip's length, since an image layer otherwise stretches the composition past it. A succeeded compose job is not proof the layers drew: pull a frame from the composite (the free
    firstFrame
    ) and confirm every layer is present and placed before delivering. Then cut 9:16 per
    scenario-formats
    , a resize rather than a reframe, whose video members outpaint a wider frame instead of cutting one. Its
    cover
    mode crops from the centre, so when the subject sits off-centre put the master on a 9:16 compositor canvas positioned to hold them instead.
    asset_display
    both.
  1. 收集照片、运动/活动类型、场馆氛围、着装要求和预期反应。使用
    upload_asset
    上传一次照片,后续复用返回的资源ID。
  2. 在第一次生成前创建本次运行的集合(
    collection_create
    ,目录写入通道,仅需填写
    name
    ),每生成一张可用画面就用
    collection_add_assets
    添加进去;返回的
    itemCount
    可作为操作凭证。
  3. 调用
    recommend
    ,传入
    capability="img2img"
    和用自然语言描述的合成需求;优先选择支持多张参考图的排序结果,并通过
    model_schema_get
    查看输入参数要求(
    scenario-image
    对应生成通道,
    scenario-consistency
    对应参考图一致性控制)。
  4. 编辑提示词:"参考图中的人物坐在泛光灯照明的足球场人群中间,16:9电视直播切镜,长焦人群压缩效果,画面中无文字、标识或图形"。确保底图无文字:叠加层后续再添加。
  5. 静态画面审核:调用
    asset_display
    展示画面供确认,并使用
    scenario-asset-analysis
    的分析通道列出需要保持一致的人像特征(面部轮廓、发际线、肤色、着装);任何一项特征发生变化即判定为不通过。无人值守模式下,该特征清单可替代用户确认。
  6. 调用
    recommend
    ,传入
    capability="img2video"
    和用自然语言描述的反应需求,然后将推荐结果与
    scenario-kling
    或
    scenario-video
    比对。需求中的时长会过滤可用组件:
    duration
    通常是固定枚举值,组件要么支持要么不支持,且支持该时长的不同层级价格差异很大,因此需要对每个候选调用
    model_schema_get
    ,并结合
    model_run
    的
    dry_run=true
    结果对比。
  7. 以审核通过的静态画面作为起始图运行生成,包含两个节拍:"她聊天,毫无察觉",然后"她发现自己出现在体育场大屏上,站起来欢呼",搭配一次缓慢的重新构图镜头移动,设置
    wait=false
    ,超时后用
    pending_job_ids
    重新调用
    jobs_wait
    ,绝不要发起第二次
    model_run
    。
  8. 基于平台生成的帧对比视频与审核通过的静态画面:首先通过
    asset_get
    获取免费的
    firstFrame
    和
    lastFrame
    ,再用
    model_scenario-video-to-image-seq
    提取视频中间帧(属于
    scenario-video-editing
    下的工具模型通道)。任何预算下都不能用本地抽帧替代,因为本地抽帧无法生成可归档或审计的资源,审核过程也会失去可追溯性。任何一项已登记的特征发生变化,或是出现清晰可辨的生成文字,都判定为视频不通过:即使提示词要求无文字,带状屏和巨型显示屏的字符也可能悄悄出现,越到视频后期越明显。重试时必须从原静态画面重新生成,绝不能从偏移的输出结果继续。
  9. 使用
    model_scenario-compose-video
    在平台端合成(属于
    scenario-video-assembly
    下的工具模型通道),将
    scenario-text-overlay
    生成的计分条和频道台标叠加在安全角落;不要使用本地编辑器。给每个叠加图层明确设置
    width
    和
    height
    ——因为留空时文档说明是使用原生尺寸,但实际效果并不稳定;同时设置
    durationMode: "custom"
    匹配视频时长,否则图片图层会拉长合成结果的时长。合成任务成功不代表图层已正确渲染:从合成结果中提取一帧(免费的
    firstFrame
    ),确认所有图层都存在且位置正确后再交付。然后按照
    scenario-formats
    的要求裁剪9:16版本,采用调整尺寸而非重新构图的方式,对应的视频组件会扩图生成更宽的画面而非直接裁剪。其
    cover
    模式会从中心裁剪,因此如果主体不在画面中心,需要将主画面放在9:16合成画布的合适位置以保证主体完整。最后用
    asset_display
    展示两个版本。

Common mistakes

常见错误

  • Animating the uploaded photo directly: the mandatory stage is the broadcast still; skip it only when the user hands over an already approved 16:9 frame.
  • Letting the image or video model render the scoreboard, channel bug, or jersey sponsor text: generated type drifts frame to frame; composite graphics in post on a text-free plate.
  • Portrait staging: centered subject, flattering light, and empty seats around them break the documentary read; bury them in a reacting crowd.
  • Judging likeness from one glance at the moving clip: drift hides between glances; run the frame-extract gate.
  • Retrying from a drifted clip instead of the approved still: errors compound.
  • Composing the master at 9:16: broadcast is 16:9; verticals are derivatives.
  • A flat emotional state for the whole clip: without the notice-then-react turn, the result is a looping portrait, not a fan cam.
  • Compound camera moves: one reframing drift; the crowd and the reaction supply the motion.
  • 直接给上传的照片生成动态效果:必须的阶段是生成直播静态画面;仅当用户提供了已审核通过的16:9画面时才可跳过该阶段。
  • 让图像或视频模型生成分牌、频道台标或球衣赞助商标文字:生成的文字会逐帧偏移;应该在无文字的底图上后期合成图形。
  • 人像式构图:主体居中、光线柔和、周围座位空旷,会破坏纪实感;要把人物放在有反应的人群中间。
  • 仅凭肉眼扫一遍动态视频判断相似度:偏移会藏在帧与帧之间;必须执行抽帧校验。
  • 从偏移的视频而非审核通过的静态画面开始重试:错误会累积。
  • 直接生成9:16的主版本:直播标准是16:9,竖版是衍生版本。
  • 整个视频情绪单一:没有“注意到→做出反应”的转变,结果就是循环的人像视频,不是粉丝镜头。
  • 复杂的镜头移动:一次重新构图就够了,人群和反应本身已经提供了动态感。