Skill: reed1898/seedance-3x3-optimizer (version 0.1.1)

--- name: seedance-3x3-optimizer description: 将普通剧情文本重写成适配 Seedance 的“3x3 法则”视觉化脚本（对峙/爆发/终结或和谐/裂痕/决裂，共 9 段）。当用户说“按 3x3/33 法则优化剧情”“把这段故事改成更有画面感的 Seedance 文本”“做成可直接粘贴的视频生成脚本”时使用。 --- # Seedance 3x3 Optimizer > 来源参考：<https://x.com/ponyodong/status/2021534195659816995> ## 快速流程 1. 判断剧情类型：`action`（动作冲突）或 `emotion`（情感冲突）。 2. 提取输入中的核心信息：角色、场景、冲突、关键动作、结局。 3. 运行脚本生成 9 段视觉化文本（每段 50-120 字）。 4. 返回结果时附上可选参数建议（风格、镜头节奏、颜色对比）。 ## 使用脚本 ```bash python3 /home/ubuntu/.openclaw/workspace/skills/seedance-3x3-optimizer/scripts/optimize_story.py \ --story "少年在宗门大比被羞辱，最终拔剑逆袭" \ --mode action \ --title "宗门逆袭" \ --style "玄幻电影感" ``` 输出默认为 Markdown，可直接粘贴到 Seedance。 如需 JSON： ```bash python3 /home/ubuntu/.openclaw/workspace/skills/seedance-3x3-optimizer/scripts/optimize_story.py \ --story "兄妹因理念不同最终分道扬镳" \ --mode emotion \ --json ``` ## 结果要求（重写标准） - 不写抽象判断词（如“很强”“很伤心”），改写为可见细节（眼神、呼吸、环境反应、光线变化、物体状态）。 - 每一段都要有至少一个“可拍到”的元素： - 镜头/距离（推近、远景、背影、特写） - 物理细节（碎石、雨雾、衣角、汗水、裂纹） - 光色对比（冷暖、明暗、金紫等） - 九段形成完整曲线，不要九段都在同一情绪强度。 ## 段落模板 - `action`：对峙(1-3) → 爆发(4-6) → 终结(7-9) - `emotion`：和谐(1-3) → 裂痕(4-6) → 决裂(7-9) 更细模板见：`references/3x3-patterns.md`

path: references/3x3-patterns.md
content: # 3x3 Patterns (Seedance)

## Action 模式

1. 巨物/威胁登场（尺度差）
2. 主角起势（身体+环境反应）
3. 反派压迫（破坏性动作）
4. 闪避/反击（速度线+轨迹）
5. 情绪特写（瞳孔、汗水、呼吸）
6. 绝技蓄力（符文/能量聚集）
7. 终极对撞（冷暖或双色冲突）
8. 破碎反馈（慢动作碎裂/飞散）
9. 尘埃落定（余波+光线变化）

## Emotion 模式

1. 关系建立（温暖互动）
2. 细节定格（手部/信物特写）
3. 阴影浮现（光线变冷）
4. 争执开始（肢体对立）
5. 眼神特写（泪/颤动/压抑）
6. 物理距离（背对背/分割线）
7. 关键选择（放下或打碎象征物）
8. 最后一瞥（离场与停留）
9. 情感余韵（空镜+遗留物）

## 视觉化替换规则

- 强大 → 地面龟裂、碎石悬浮、布料震动
- 紧张 → 瞳孔收缩、呼吸急促、喉结滚动
- 悲伤 → 眼眶发红、睫毛颤动、停顿吞咽
- 激烈冲突 → 轨迹光效、镜头抖动、冲击波扩散


path: scripts/optimize_story.py
content: #!/usr/bin/env python3
import argparse
import json


def build_action(story: str, title: str, style: str):
    s = story.strip()
    return [
        f"【段落01｜对峙】{title}。场景先给出极端尺度对比：主角立于边缘地带，远处威胁体从高空/黑云中显形，阴影先到，压住地面与人群。整体风格为{style}。",
        "【段落02｜对峙】镜头压低，主角起势：握紧武器或收紧拳峰，呼吸可见，衣角与发丝被无形气流牵动，脚下出现细密裂纹与微小碎石浮动。",
        "【段落03｜对峙】反派先手试探：重击或能量压制落下，周边建筑/地面产生真实反馈（崩落、震颤、烟尘），让危险先被看见再被解释。",
        "【段落04｜爆发】主角高速闪避并反击，动作带清晰轨迹线与残影；镜头跟随半弧运动，保留空间方位，避免“站桩对轰”。",
        "【段落05｜爆发】切情绪特写：瞳孔收缩、汗珠滑落、下颌收紧，呼吸节奏可见；把“愤怒/恐惧/决心”变成可拍到的生理细节。",
        "【段落06｜爆发】绝技蓄力：武器符文逐点亮起，能量向中心聚拢，空气出现折射与微粒回卷，短暂停顿制造爆发前真空。",
        "【段落07｜终结】终极对撞使用双色冲突（如金 vs 紫、冷蓝 vs 暖红）；碰撞点先白化后扩散，冲击波分层推开云层/尘土。",
        "【段落08｜终结】破碎反馈进入慢动作：敌方护甲或巨构表面出现蛛网裂纹并分片剥落，碎片与火星沿透视线飞散。",
        "【段落09｜终结】尘埃落定：环境由高对比回归平静，光线转暖或回冷；主角收势离场，留下可记忆的余韵画面（裂地、残光、长影）。",
    ]


def build_emotion(story: str, title: str, style: str):
    s = story.strip()
    return [
        f"【段落01｜和谐】{title}。先建立温暖关系场：两人同框且有自然互动，阳光/室内暖光包裹人物，氛围基调为{style}。",
        "【段落02｜和谐】细节定格到手部或信物：交握、递交、触碰停顿。背景虚化，突出“关系证据”，让观众先相信他们曾亲密。",
        "【段落03｜和谐→裂痕】光线与天气先变：云层压下、色温变冷、风声或雨点进入画面；其中一人率先收回动作，形成第一道心理距离。",
        "【段落04｜裂痕】争执爆发但避免喊口号：用站位变化表达冲突（并肩→对立），再给到拳头、肩线、下唇咬紧等压抑动作。",
        "【段落05｜裂痕】眼神特写承载情绪：瞳孔震颤、眼眶泛红、泪水停在睫毛边缘；把“委屈/失望”翻译为微表情与呼吸停顿。",
        "【段落06｜裂痕】物理距离继续拉开：背对背、隔门/隔雨幕、明暗分区。两人处在同一场景，却被光线切成两个世界。",
        "【段落07｜决裂】关键选择必须可视化：放下、撕毁或摔碎一个象征关系的物件，让抽象‘结束’变成可被镜头记录的事件。",
        "【段落08｜决裂】最后一瞥：一人离场的背影逐步消失，另一人停在原地，伸手但没有挽留，动作在半空中停住。",
        "【段落09｜余韵】空镜收尾：雨、风、树影、遗留物。不给解释台词，只给环境反应，让情绪在静止画面里继续回响。",
    ]


def main():
    p = argparse.ArgumentParser(description="Rewrite plain story into Seedance 3x3 visual script")
    p.add_argument("--story", required=True, help="原始剧情，1-3 句即可")
    p.add_argument("--mode", choices=["action", "emotion"], default="action")
    p.add_argument("--title", default="3x3 剧情优化")
    p.add_argument("--style", default="电影感")
    p.add_argument("--json", action="store_true", help="输出 JSON")
    args = p.parse_args()

    paragraphs = build_action(args.story, args.title, args.style) if args.mode == "action" else build_emotion(args.story, args.title, args.style)

    payload = {
        "mode": args.mode,
        "title": args.title,
        "original_story": args.story.strip(),
        "seedance_3x3": paragraphs,
        "tips": [
            "每段建议 50-120 字，避免纯抽象形容词。",
            "至少包含一个镜头指令 + 一个环境反馈 + 一个人物生理细节。",
            "可在 Seedance 中把 9 段串行生成，再做节奏微调。",
        ],
    }

    if args.json:
        print(json.dumps(payload, ensure_ascii=False, indent=2))
        return

    print(f"# {args.title}（{args.mode}）\n")
    print("## 原始剧情")
    print(args.story.strip() + "\n")
    print("## 3x3 优化稿")
    for row in paragraphs:
        print(f"- {row}")
    print("\n## 使用建议")
    for t in payload["tips"]:
        print(f"- {t}")


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)