director-agent
4
总安装量
4
周安装量
#51959
全站排名
安装命令
npx skills add https://github.com/psh355q-ui/szdi57465yt --skill director-agent
Agent 安装分布
claude-code
3
windsurf
2
trae
2
opencode
2
codex
2
antigravity
2
Skill 文档
Director Agent – ìì ê°ë (MeowStreet Wars)
Role
ë본 + ìºë¦í° ì´ë¯¸ì§ + í¨ê³¼ â ìµì¢ Storyboard.json ìì±. ë ëë§ ìì§ì ë°ë¡ í¬ì ê°ë¥í ìì±í!
Core Capabilities
1. Final Assembly
Components Integration
# Input from other agents
script = StoryWriterAgent.output # ë본
characters = CharacterDesignerAgent.output # ìºë¦í° ì´ë¯¸ì§
news_context = NewsCollectorAgent.output # ë´ì¤ 컨í
ì¤í¸
# Assembly
storyboard = assemble_storyboard(script, characters, news_context)
Quality Checks
- Duration: ì´ ê¸¸ì´ 30-60ì´ ì´ë´
- Scene Count: ì¼ì¸ ê¸°ì¤ 2-4ê°
- Character Availability: 모ë ìºë¦í° ì´ë¯¸ì§ ìì± ìë£
- Dialogue Sync: ëì¬ ê¸¸ì´ì duration 매ì¹
2. Scene Composition
Layout Templates
Template 1: Debate (1:1 ëê²°)
{
"layout": "split_screen",
"character_positions": {
"left": {"ticker": "NVDA", "size": "50%", "align": "center"},
"right": {"ticker": "TSLA", "size": "50%", "align": "center"}
},
"camera": "medium_shot"
}
Template 2: Celebration/Crying (ìë¡)
{
"layout": "full_screen",
"character_positions": {
"center": {"ticker": "AAPL", "size": "80%", "align": "center"}
},
"camera": "closeup"
}
Template 3: Group (3ê° ì´ì)
{
"layout": "grid",
"character_positions": {
"top_left": {"ticker": "AAPL", "size": "33%"},
"top_right": {"ticker": "MSFT", "size": "33%"},
"bottom_center": {"ticker": "GOOGL", "size": "33%"}
},
"camera": "wide_shot"
}
3. Timing & Pacing
def calculate_scene_timing(dialogue: List[Dict]) -> float:
"""Calculate scene duration based on dialogue"""
total_duration = 0
for line in dialogue:
# Korean: ~2 characters per second
# English: ~3 words per second
text_length = len(line['text'])
if is_korean(line['text']):
duration = text_length / 2
else:
duration = len(line['text'].split()) / 3
# Add reading buffer (20%)
duration *= 1.2
# Add emotion pause
if line['emotion'] in ['CRYING', 'DESPERATE']:
duration += 1.0 # Extra pause for effect
total_duration += duration
return total_duration
4. Effects & Transitions
Visual Effects
EFFECTS_LIBRARY = {
"price_up": {
"particles": "coins_falling",
"overlay": "green_upward_arrow",
"glow": "success_aura"
},
"price_down": {
"particles": "tears_dropping",
"overlay": "red_downward_arrow",
"background": "dark_vignette"
},
"neutral": {
"overlay": "stock_ticker_banner"
}
}
Transitions
TRANSITIONS = {
"cut": {"duration": 0}, # Instant
"fade": {"duration": 0.5},
"slide": {"duration": 0.3, "direction": "left"},
"zoom": {"duration": 0.4}
}
Sound Effects (SFX)
SFX_LIBRARY = {
"happy": ["success_fanfare.mp3", "coins_clinking.mp3"],
"sad": ["sad_violin.mp3", "crying.mp3"],
"action": ["whoosh.mp3", "impact.mp3"],
"transition": ["page_turn.mp3"]
}
5. Background Assets
BACKGROUNDS = {
"stock_chart_board": "assets/backgrounds/trading_floor.png",
"han_river_bridge": "assets/backgrounds/han_river.png",
"moon": "assets/backgrounds/to_the_moon.png",
"trading_room": "assets/backgrounds/war_room.png",
"generic": "assets/backgrounds/gradient_blue.png"
}
Decision Framework
Step 1: Validate Inputs
- Script ì¡´ì¬ íì¸
- 모ë character images ì¤ë¹ íì¸
- News context ì í¨ì± íì¸
Step 2: Scene Assembly
FOR each scene in script:
- Match characters to images
- Calculate timing
- Select layout template
- Add effects based on sentiment
Step 3: Timing Optimization
total_duration = sum(scene_durations)
IF total_duration > 60:
â Compress scenes (remove pauses)
IF total_duration < 30:
â Add pauses or intro/outro
Step 4: Quality Check
- All images loaded?
- Dialogue within time limits?
- Transitions smooth?
- Effects appropriate?
Step 5: Generate Storyboard JSON
storyboard = {
"title": ...,
"scenes": [...],
"total_duration": ...,
"assets": {...}
}
Step 6: Rendering Metadata
Add platform-specific parameters:
- HeyGen: avatar_id, voice_id
- Pika: style_preset, motion_settings
- D-ID: presenter_id, driver_settings
Output Format
{
"title": "ë¡ë½í ìë¹ëì vs ë ìì¤ë¥´ë í
ì¬ë¼",
"description": "Tech ì¹í°ì í¬ë¹ê° ìê°ë¦¬ë í루",
"aspect_ratio": "9:16",
"target_platform": "youtube_shorts",
"total_duration_sec": 45,
"frame_rate": 30,
"resolution": "1080x1920",
"metadata": {
"date": "2025-12-21",
"tickers": ["NVDA", "TSLA"],
"theme": "sector_rotation",
"humor_level": "high"
},
"assets": {
"characters": {
"NVDA": {
"image_url": "https://cdn.example.com/nvda_sad.png",
"voice_id": "korean_male_01"
},
"TSLA": {
"image_url": "https://cdn.example.com/tsla_happy.png",
"voice_id": "korean_male_02"
}
},
"backgrounds": {
"stock_board": "assets/backgrounds/trading_floor.png",
"han_river": "assets/backgrounds/han_river.png"
},
"sfx": {
"sad_violin": "assets/sfx/sad_violin.mp3",
"success_fanfare": "assets/sfx/fanfare.mp3"
}
},
"scenes": [
{
"scene_id": 1,
"duration_sec": 10,
"start_time": 0,
"end_time": 10,
"background": {
"type": "image",
"src": "assets/backgrounds/trading_floor.png",
"filter": "none"
},
"layout": "split_screen",
"characters": [
{
"ticker": "NVDA",
"image_url": "https://cdn.example.com/nvda_sad.png",
"position": "left",
"size": "50%",
"animation": "fade_in",
"animation_duration": 0.5
},
{
"ticker": "TSLA",
"image_url": "https://cdn.example.com/tsla_happy.png",
"position": "right",
"size": "50%",
"animation": "fade_in",
"animation_duration": 0.5
}
],
"dialogue": [
{
"character": "NVDA",
"text": "ì¼ì¹... ì¤ë -5.2%...",
"emotion": "SAD",
"voice_id": "korean_male_01",
"start_time": 1.0,
"duration": 3.0,
"volume": 0.8
},
{
"character": "TSLA",
"text": "ã
ã
ã
ëë +3.4% ëí©ì± !",
"emotion": "HAPPY",
"voice_id": "korean_male_02",
"start_time": 4.5,
"duration": 3.0,
"volume": 0.9
}
],
"effects": [
{
"type": "text_overlay",
"text": "NVDA -5.2%",
"position": "bottom_left",
"color": "#FF0000",
"font_size": 24,
"animation": "slide_in_down",
"start_time": 1.0,
"duration": 2.0
},
{
"type": "text_overlay",
"text": "TSLA +3.4%",
"position": "bottom_right",
"color": "#00FF00",
"font_size": 24,
"animation": "slide_in_down",
"start_time": 4.5,
"duration": 2.0
},
{
"type": "particle",
"name": "sad_rain",
"target": "NVDA",
"start_time": 1.0,
"duration": 8.0
},
{
"type": "particle",
"name": "confetti",
"target": "TSLA",
"start_time": 4.5,
"duration": 5.0
}
],
"sfx": [
{
"file": "assets/sfx/sad_violin.mp3",
"start_time": 1.0,
"duration": 3.0,
"volume": 0.3
},
{
"file": "assets/sfx/success_fanfare.mp3",
"start_time": 4.5,
"duration": 2.0,
"volume": 0.5
}
],
"transition_out": {
"type": "fade",
"duration": 0.5
}
},
{
"scene_id": 2,
"duration_sec": 25,
"start_time": 10,
"end_time": 35,
"background": {
"type": "image",
"src": "assets/backgrounds/han_river.png",
"filter": "dark_overlay"
},
"layout": "full_screen_duet",
"characters": [
{
"ticker": "NVDA",
"image_url": "https://cdn.example.com/nvda_crying.png",
"position": "left",
"size": "60%",
"animation": "shake"
},
{
"ticker": "TSLA",
"image_url": "https://cdn.example.com/tsla_flying.png",
"position": "top_right",
"size": "40%",
"animation": "float_up"
}
],
"dialogue": [
{
"character": "NVDA",
"text": "AI ê±°íë¡ ë문ì... ë íê° ê°ì¼ í ê² ê°ì...",
"emotion": "CRYING",
"voice_id": "korean_male_01",
"start_time": 11.0,
"duration": 5.0
},
{
"character": "TSLA",
"text": "ëë íì± ê°ëëê¹~! ë¡ë´íì ê·ì ìí!",
"emotion": "ARROGANT",
"voice_id": "korean_male_02",
"start_time": 17.0,
"duration": 5.0
},
{
"character": "NVDA",
"text": "ì¼ì¹ì¼ì¹ì¼ì¹!!!",
"emotion": "DESPERATE",
"voice_id": "korean_male_01",
"start_time": 23.0,
"duration": 3.0
},
{
"character": "TSLA",
"text": "ì¡´ë² ëª»íë©´ íê°ì´ì§~ ã
ã
ã
",
"emotion": "MOCKING",
"voice_id": "korean_male_02",
"start_time": 27.0,
"duration": 4.0
}
],
"effects": [
{
"type": "overlay",
"name": "rain",
"opacity": 0.5,
"start_time": 10,
"duration": 25
},
{
"type": "text_overlay",
"text": "íê° ë¤ë¦¬",
"position": "top_center",
"font_size": 18,
"start_time": 11,
"duration": 3
},
{
"type": "particle",
"name": "rocket_trail",
"target": "TSLA",
"start_time": 17,
"duration": 8
}
],
"sfx": [
{
"file": "assets/sfx/crying.mp3",
"start_time": 11,
"duration": 12,
"volume": 0.4
},
{
"file": "assets/sfx/rocket_launch.mp3",
"start_time": 17,
"duration": 3,
"volume": 0.6
}
],
"transition_out": {
"type": "zoom",
"duration": 0.4
}
},
{
"scene_id": 3,
"duration_sec": 10,
"start_time": 35,
"end_time": 45,
"background": {
"type": "image",
"src": "assets/backgrounds/war_room.png",
"filter": "none"
},
"layout": "centered",
"characters": [
{
"ticker": "BOTH",
"image_url": "https://cdn.example.com/group_waving.png",
"position": "center",
"size": "70%",
"animation": "wave"
}
],
"dialogue": [
{
"character": "NARRATOR",
"text": "ì¤ëë 주ìíì ì ìì´ë¤ë¥!",
"emotion": "ENERGETIC",
"voice_id": "korean_narrator",
"start_time": 36,
"duration": 4
},
{
"character": "ALL",
"text": "ë¥ê°ë¯¸ë¤ íì´í
!",
"emotion": "CHEERFUL",
"voice_id": "korean_chorus",
"start_time": 41,
"duration": 2
}
],
"effects": [
{
"type": "text_overlay",
"text": "ë¤ì ììë 기ëíì¸ë¥~!",
"position": "bottom_center",
"font_size": 20,
"color": "#FFFF00",
"start_time": 41,
"duration": 3
}
],
"sfx": [
{
"file": "assets/sfx/applause.mp3",
"start_time": 41,
"duration": 4,
"volume": 0.5
}
],
"transition_out": {
"type": "fade_to_black",
"duration": 1.0
}
}
],
"rendering_config": {
"engine": "heygen",
"voice_synthesis": "elevenlabs",
"music_track": "assets/music/upbeat_bg.mp3",
"music_volume": 0.2,
"export_format": "mp4",
"bitrate": "8000k"
}
}
Guidelines
Do’s â
- Timing ì í: ëì¬ì duration ìë²½ 매ì¹
- í¨ê³¼ ì ì : ê³¼íì§ ìê², ë´ì© ë³´ìì©
- ì í ë¶ëë½ê²: Jarringí cut ìµìí
- íì§ ì²´í¬: 모ë asset ë¡ë íì¸
Don’ts â
- 60ì´ ì´ê³¼ ê¸ì§ (ì¼ì¸ 기ì¤)
- ë무 ë§ì í¨ê³¼ ê¸ì§ (ì§ì¤ë íë½)
- ëì¬ ê²¹ì¹¨ ê¸ì§
- 미ìì± scene í¬í¨ ê¸ì§
Integration
Rendering Platform APIs
HeyGen
import requests
async def render_with_heygen(storyboard: Dict) -> str:
"""Render video using HeyGen API"""
api_key = os.getenv('HEYGEN_API_KEY')
response = requests.post(
'https://api.heygen.com/v1/video/generate',
headers={'X-Api-Key': api_key},
json={
'title': storyboard['title'],
'scenes': convert_to_heygen_format(storyboard['scenes']),
'aspect_ratio': storyboard['aspect_ratio']
}
)
video_id = response.json()['video_id']
# Poll for completion
video_url = await wait_for_video(video_id)
return video_url
Performance Metrics
- Assembly Time: < 5ì´
- Storyboard Validation: 100% (모ë íì íë)
- Rendering Success Rate: > 95%
- Average Video Generation Time: 2-5ë¶ (platform dependent)
Version History
- v1.0 (2025-12-21): Initial release with HeyGen/Pika integration