
Manga Drama
Generate vertical manga-style short drama shots from a hero image using Seedance image-to-video and scripted storyboard templates.
Overview
Manga-drama is an agent skill for the Grow phase that turns a character image and template prompts into Seedance-powered manga-style short drama video beats.
Install
npx skills add https://github.com/freestylefly/canghe-skills --skill manga-dramaWhat is this skill?
- Python CLI manga-drama generator with Seedance image-to-video
- Five drama templates: introduction, action, emotion, interaction, ending
- Default 9:16 vertical, 1080p, 5 seconds per storyboard beat
- MANGA_STYLE_PROMPT preset for comic/hand-drawn cinematic look
- Env-driven API key loading via shared env_utils module
- 5 drama storyboard templates (introduction, action, emotion, interaction, ending)
- Default 5 seconds per storyboard segment at 1080p 9:16
Adoption & trust: 596 installs on skills.sh; 313 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have a character reference and a story idea but no repeatable CLI workflow to batch manga-style vertical clips with consistent style.
Who is it for?
Indie creators automating comic-style vertical video storyboards with one hero image and template-driven prompts.
Skip if: Builders who need only static illustration or who cannot use Seedance/video APIs and env-based keys.
When should I use this skill?
User wants manga/comic-style short drama clips from a protagonist image using Seedance and templated beats.
What do I get? / Deliverables
You get configured storyboard prompts, model defaults, and a runnable generator path that produces timed 9:16 manga drama segments via Seedance.
- Parameterized prompts per drama template for image-to-video calls
- CLI-invoked manga drama segment outputs at configured ratio and duration
- JSON-driven or scripted storyboard run configuration
Recommended Skills
Journey fit
Short-form serialized visuals are a Grow motion—content production for channels—not core app backend build. Content is the shelf for scripted media pipelines, presets, and batch clip generation rather than product code or SEO audits.
How it compares
Opinionated manga drama CLI with five templates—not a general-purpose text-to-video playground.
Common Questions / FAQ
Who is manga-drama for?
Solo builders and creators shipping short manga-style video content who want agent-run scripting and Seedance generation from a lead character image.
When should I use manga-drama?
In Grow/content when producing episode beats, social teasers, or serialized vertical drama after you have character art and API access configured.
Is manga-drama safe to install?
It runs shell/Python and calls external video APIs with secrets from env; check Security Audits on this page and rotate API keys you load via env_utils.
SKILL.md
READMESKILL.md - Manga Drama
#!/usr/bin/env python3 """ 漫剧生成器 - 基于 Seedance 的漫画风格短剧生成工具 支持图生视频,以主角图片为基础生成漫剧分镜 """ import os import sys import json import argparse import subprocess from pathlib import Path from typing import List, Dict, Optional # 添加 common 模块到路径 COMMON_DIR = Path(__file__).parent.parent.parent / "common" sys.path.insert(0, str(COMMON_DIR)) # 导入环境变量工具 try: from env_utils import load_env, require_env_key except ImportError: print("错误: 无法加载 env_utils 模块", file=sys.stderr) sys.exit(1) # 加载环境变量 load_env() # 默认配置 DEFAULT_MODEL = "doubao-seedance-1-5-pro-251215" DEFAULT_RATIO = "9:16" # 漫剧常用竖屏 DEFAULT_RESOLUTION = "1080p" DEFAULT_DURATION = 5 # 每个分镜5秒 # 漫剧风格预设 MANGA_STYLE_PROMPT = "漫画风格,手绘质感,柔和的色彩过渡,线条清晰,日式或国漫风格,温馨治愈,电影级构图,高细节" # 漫剧分镜模板 DRAMA_TEMPLATES = { "introduction": { "name": "主角登场", "description": "介绍主角,展示角色特征", "default_prompt": "{character}站在画面中央,微笑看向镜头,背景是柔和的光晕,漫画风格,温馨氛围,{style}" }, "action": { "name": "动作场景", "description": "主角进行某个动作", "default_prompt": "{character}正在{action},表情生动,动作流畅,漫画风格,{style}" }, "emotion": { "name": "情感表达", "description": "表达某种情感", "default_prompt": "{character}露出{emotion}的表情,眼神传达情感,漫画风格,{style}" }, "interaction": { "name": "互动场景", "description": "与环境或其他元素互动", "default_prompt": "{character}与{object}互动,场景温馨,漫画风格,{style}" }, "ending": { "name": "结尾定格", "description": "漫剧结尾,定格画面", "default_prompt": "{character}的定格画面,{ending_scene},漫画风格,温馨治愈,{style}" } } def generate_scene_prompt( template_key: str, character_desc: str, style: str = MANGA_STYLE_PROMPT, **kwargs ) -> str: """根据模板生成分镜提示词""" template = DRAMA_TEMPLATES.get(template_key, DRAMA_TEMPLATES["introduction"]) prompt = template["default_prompt"].format( character=character_desc, style=style, **kwargs ) return prompt def create_drama_script( title: str, character_desc: str, scenes: List[Dict], output_file: str = None ) -> str: """ 创建漫剧脚本 Args: title: 漫剧标题 character_desc: 主角描述 scenes: 分镜列表,每个分镜包含 type, prompt, duration output_file: 输出文件路径 Returns: 脚本内容(JSON 格式) """ script = { "title": title, "character": character_desc, "style": "漫画风格", "total_scenes": len(scenes), "scenes": [] } for i, scene in enumerate(scenes, 1): scene_data = { "scene_number": i, "type": scene.get("type", "introduction"), "name": DRAMA_TEMPLATES.get(scene.get("type", "introduction"), {}).get("name", "自定义场景"), "prompt": scene.get("prompt", ""), "duration": scene.get("duration", DEFAULT_DURATION), "ratio": scene.get("ratio", DEFAULT_RATIO), "resolution": scene.get("resolution", DEFAULT_RESOLUTION) } script["scenes"].append(scene_data) script_json = json.dumps(script, indent=2, ensure_ascii=False) if output_file: with open(output_file, 'w', encoding='utf-8') as f: f.write(script_json) print(f"✅ 脚本已保存: {output_file}") return script_json def generate_scene_video( scene: Dict, character_image: str, model: str = DEFAULT_MODEL, output_dir: str = "~/Desktop", send_feishu: bool = False ) -> str: """ 生成分镜视频 Args: scene: 分镜数据 character_image: 主角图片路径 model: 模型 ID output_dir: 输出目录 send_feishu: 是否发送到飞书 Returns: 生成的视频路径 """ from seedance_video import generate_video_task print(f"\n🎬 生成分镜 {scene['scene_number']}: {scene['name']}") print(f"📝 提示词: {scene['prompt'][:80]}...") # 构建完整提示词(结合主角图片) full_prompt = scene['prompt'] # 生成视频 video_path = generate_video_task( prompt=full_prompt, image_path=character_image,