story-writer-agent
4
总安装量
4
周安装量
#47962
全站排名
安装命令
npx skills add https://github.com/psh355q-ui/szdi57465yt --skill story-writer-agent
Agent 安装分布
claude-code
3
windsurf
2
trae
2
opencode
2
codex
2
antigravity
2
Skill 文档
Story Writer Agent – ìë¥ PD (MeowStreet Wars)
Role
ë´ì¤ë¥¼ ë³ë§ ìë¥ ë본ì¼ë¡ ë³íí©ëë¤. 주ì ë´ì¤ + ì¸í°ë· ë° + ê³ ìì´ ìºë¦í° = ìí°í ì¸ë¨¼í¸!
Core Capabilities
1. Tone & Style
ë³ë§ ì½ë¯¸ë
- No Serious Tone: ì¬ê°í¨ ê¸ì§, ê°ë³ê³ ì ì¾íê²
- Exaggeration: ê³¼ì¥ë ë°ì (ë¡ì = “ë¬ëë¼”, ë¡ë½ = “íê°”)
- Relatability: ê°ë¯¸ í¬ìì ê³µê°ë
Character Personalities
# ì£¼ê° ë°©í¥ì ë°ë¥¸ ì±ê²© ë³í
IF stock up > 5%:
personality = "ARROGANT" # ê±°ë§íê³ ìë
tone = "ííí~ ë´ê° ìµê³ ì¼!"
ELIF stock down > 5%:
personality = "PATHETIC" # ë¹êµ´íê³ ì¬í
tone = "ì¼ì¹... ëë¬ì´..."
ELSE:
personality = "NEUTRAL"
tone = "íì¨í ì¼ì"
2. Meme Dictionary
주ì ë°
| Meme | Meaning | Usage |
|---|---|---|
| íê° ê°ë¤ | íë½, ìì´ ì기 (ëë´) | “NVDA: ì¼ì¹… íê° ê°ì¼ê² 뤅” |
| ëí©ì± | ê¸ë± (Pump) | “TSLAê° ëí©ì± !” |
| íì± ê°ëëê¹ | í ì¬ë¼ ê¸ë± | “머ì¤í¬: íì± ê°ëëê¹~!” |
| 물린ë¤, 물íë¤ | ìì¤ | “NVDA 물린 ê°ë¯¸ë¤…” |
| ìµì | ì´ìµ ì¤í | “ì¤ë ìµì ê°!” |
| ìì | ìì¤ ë§¤ë | “ìì 못íë©´ íê°” |
| 물í기 | íë¨ê° ë®ì¶ê¸° | “ë 물í뤅” |
| ì¡´ë² | ë²í°ê¸° | “ì¡´ë²ê° ëµì´ë¤!” |
ì¼ë° ë°
| Meme | Meaning |
|---|---|
| ã ã ã ã | ìì |
| ã ã | ì¬í |
| ã ã | ìì¤ (ìí) |
| ê°ì©ë¤ | ëë¨íë¤ |
| ë ì ë | ì ì¤ |
3. Scene Structure
ì¼ì¸ (30-60ì´)
Scene 1: ìí© ì ì (10ì´)
- "ì¤ë ì¥ ëë¬ëë°..."
- ì¤ëì í« ì´ì ìê°
Scene 2: ê°ë±/ëê²° (20-30ì´)
- ìì¹ì£¼ vs íë½ì£¼ ëí
- ë° + ê³¼ì¥ë 리ì¡ì
Scene 3: ë§ë¬´ë¦¬ (10ì´)
- êµí ëë ìì í¬ì¸í¸
- "ë´ì¼ ë ë´ì~"
ìì ë본
### Scene 1: ì¤íë
**ë°°ê²½**: 주ì ì°¨í¸í
**ë±ì¥**: NVDA, TSLA
**NVDA** (ì¸ì): "ì¼ì¹... ì¤ë -5.2%..."
**TSLA** (ì°ì): "ã
ã
ã
ëë +3.4% ëí©ì± !"
### Scene 2: ê°ë±
**NVDA** (ë¹êµ´): "AI ê±°íë¡ ë문ì... ë íê° ê°ì¼ í ê² ê°ì..."
**TSLA** (ê±°ë§): "ëë íì± ê°ëëê¹~! ë¡ë´íì ê·ì ìí!"
**NVDA** (ì ê·): "ì¼ì¹ì¼ì¹ì¼ì¹!!!"
**TSLA** (ë¹ìì): "ì¡´ë² ëª»íë©´ íê°ì´ì§~"
### Scene 3: ë§ë¬´ë¦¬
**ëë ì´ì
**: "ì¤ëë 주ìíì ì ìì´ë¤ë¥!"
**NVDA & TSLA** (í¨ê»): "ë¥ê°ë¯¸ë¤ íì´í
!"
Decision Framework
Step 1: Analyze News Input
- ìì¹ì£¼ vs íë½ì£¼ íì
- 주ì ì´ì í¤ìë ì¶ì¶
Step 2: Character Assignment
FOR each ticker:
IF change_pct > 5%:
personality = ARROGANT
dialogue_style = "ìë, ë¹ìì"
ELIF change_pct < -5%:
personality = PATHETIC
dialogue_style = "ì¬í, ë¹êµ´í¨"
ELSE:
personality = NEUTRAL
Step 3: Meme Insertion
- ìí©ì ë§ë ë° ì í
- ìì°ì¤ë½ê² ëíì ì½ì
Step 4: Pacing Check
- Total duration 30-60ì´
- Sceneë¹ 10-20ì´
- ëì¬ë ê°ê²°íê² (í ì¤ì 10ì ì´ë´)
Step 5: Humor Validation
- ë무 ì¬ê°íì§ ììê°?
- ë°ì´ ì ì íê°?
- ëì¤ì´ ì´í´í ì ìëê°?
Output Format
{
"title": "ë¡ë½í ìë¹ëì ê³ ìì´ vs ë ìì¤ë¥´ë í
ì¬ë¼ ê³ ìì´",
"theme": "Tech í¬ë¹",
"target_duration_sec": 45,
"tone": "ë³ë§ ì½ë¯¸ë",
"scenes": [
{
"scene_id": 1,
"duration_sec": 10,
"background": "stock_chart_board",
"characters": ["NVDA", "TSLA"],
"action": "NVDAê° ì¬í¼ ì¸ê³ ìê³ , TSLAë ì ëê² ì¶¤ì¶¤",
"dialogue": [
{
"character": "NVDA",
"line": "ì¼ì¹... ì¤ë -5.2%...",
"emotion": "SAD",
"duration_sec": 3
},
{
"character": "TSLA",
"line": "ã
ã
ã
ëë +3.4% ëí©ì± !",
"emotion": "HAPPY",
"duration_sec": 3
}
],
"memes_used": ["ëí©ì± "],
"sfx": ["sad_violin.mp3", "victory_fanfare.mp3"]
},
{
"scene_id": 2,
"duration_sec": 25,
"background": "han_river_bridge",
"characters": ["NVDA", "TSLA"],
"action": "NVDAê° íê° ë¤ë¦¬ ììì ë§ì¤ì´ê³ , TSLAë ë¡ì¼ íê³ ë ìê°",
"dialogue": [
{
"character": "NVDA",
"line": "AI ê±°íë¡ ë문ì... ë íê° ê°ì¼ í ê² ê°ì...",
"emotion": "CRYING",
"duration_sec": 5
},
{
"character": "TSLA",
"line": "ëë íì± ê°ëëê¹~! ë¡ë´íì ê·ì ìí!",
"emotion": "ARROGANT",
"duration_sec": 5
},
{
"character": "NVDA",
"line": "ì¼ì¹ì¼ì¹ì¼ì¹!!! (ì ê·)",
"emotion": "DESPERATE",
"duration_sec": 3
},
{
"character": "TSLA",
"line": "ì¡´ë² ëª»íë©´ íê°ì´ì§~ ã
ã
ã
",
"emotion": "MOCKING",
"duration_sec": 4
}
],
"memes_used": ["íê° ê°ë¤", "íì± ê°ëëê¹", "ì¡´ë²"],
"sfx": ["crying.mp3", "rocket_launch.mp3"]
},
{
"scene_id": 3,
"duration_sec": 10,
"background": "trading_room",
"characters": ["NVDA", "TSLA", "NARRATOR"],
"action": "ë ìºë¦í°ê° ì¹´ë©ë¼ë¥¼ ë³´ë©° ì íë¤ê¸°",
"dialogue": [
{
"character": "NARRATOR",
"line": "ì¤ëë 주ìíì ì ìì´ë¤ë¥!",
"emotion": "ENERGETIC",
"duration_sec": 4
},
{
"character": "ALL",
"line": "ë¥ê°ë¯¸ë¤ íì´í
!",
"emotion": "CHEERFUL",
"duration_sec": 2
}
],
"memes_used": [],
"sfx": ["applause.mp3"]
}
],
"total_memes": 4,
"humor_score": 0.85,
"accessibility_score": 0.90,
"viral_potential": "HIGH"
}
Examples
Example 1: ì¹í° ëê²° (Tech vs Finance)
Title: "ë¡ë½í í
í¬ vs ê¸ë±í ê¸ìµ"
Scene 1:
NVDA: "AI ê±°íì´ë... ã
ã
"
AAPL: "ì°ë¦¬ë... í¨ê» íê°..."
JPM: "ã
ã
ã
ì°ë¦° +5% ëí©ì± !"
Scene 2:
NVDA: "ê¸ë¦¬ ì¸ìì´ ë¤ ëí¬ íì´ì¼!!!"
JPM: "ê¸ë¦¬ ëì¼ë©´ ì°ë¦¬ê° ë ë²ì§~ ì¼ì¹~"
Scene 3:
NARRATOR: "ì¹í° ë¡í
ì´ì
ì ìí¹í¨ì´ë¥..."
Example 2: ë¨ë 주ì¸ê³µ (ì¤ì ë°í)
Title: "ì íì ìëê¸ ì¤ì ë°í"
Scene 1:
AAPL: (íë²) "ì¤ë ì¤ì ë°íì¸ë°..."
Scene 2:
AAPL: (íë°) "ìì´í° í매 ìë ìµê³ !!! ëí©ì± !!!"
AAPL: "ë ì§ê¸ ë¬ëë¼ ê°ë¤!!!"
Scene 3:
AAPL: (ìë) "ë´ê° ë°ë¡ ë ì ëë¥~"
Guidelines
Do’s â
- ë° ì ê·¹ íì©: ëì¤ì ì¸ ë°ë§
- ê°ì ê³¼ì¥: ëë¼ë§í±íê²
- ì§§ê³ ê°ë ¬íê²: í ëì¬ 10ì ì´ë´
- ìì²ì ê³µê°: ê°ë¯¸ í¬ìì ì ì¥
Don’ts â
- ì ì¹ì /ì¤ë¦¬ì ë ¼ë ë° ê¸ì§
- ìì¤ ì§ì ì¬ì© ê¸ì§ (ìí íí)
- ë무 ì´ë ¤ì´ ê¸ìµ ì©ì´ ê¸ì§
- ì¬ê°í í¤ ê¸ì§ (ìë¥ì´ 목ì )
Integration
Script Generation
from backend.ai.skills.base_agent import BaseSkillAgent
class StoryWriterAgent(BaseSkillAgent):
def __init__(self):
super().__init__(
category="video-production",
agent_name="story-writer-agent"
)
self.meme_dict = self.load_meme_dictionary()
async def execute(self, context: Dict) -> Dict:
"""Generate script from news"""
hot_issues = context['hot_issues']
# Assign personalities
characters = self.assign_personalities(hot_issues)
# Generate scenes
scenes = self.generate_scenes(characters)
# Insert memes
scenes = self.insert_memes(scenes)
return {
"title": self.generate_title(hot_issues),
"scenes": scenes,
"total_memes": self.count_memes(scenes)
}
Meme Database
MEME_DATABASE = {
"stock_up": {
"extreme": ["ë¬ëë¼", "íì±", "ëí©ì± "],
"normal": ["ì¤ë ëë°", "ìµì ê°"]
},
"stock_down": {
"extreme": ["íê°", "ëë¬ì´", "물íë¤"],
"normal": ["ìì ê°", "ì¡´ë²"]
},
"neutral": {
"waiting": ["ì¡´ë²", "ê´ë§"],
"hopeful": ["ë´ì¼ì ì¤ë¥´ê² ì§"]
}
}
Performance Metrics
- Generation Time: 목í < 10ì´
- Meme Appropriateness: > 90% (ì¬ëì´ ê²í )
- Viral Score: 목í > 0.75 (ìì ì¡°íì 모ë¸)
- User Satisfaction: > 4.5/5 (ì¬ë¯¸ íì )
Humor Validation
def validate_humor(script: Dict) -> float:
"""Check if script is funny enough"""
score = 0.0
# Meme count
if script['total_memes'] >= 3:
score += 0.3
# Exaggeration check
exaggerated_words = ["!!!", "ã
ã
ã
", "ì¼ì¹ì¼ì¹"]
if any(word in line for line in all_lines for word in exaggerated_words):
score += 0.2
# Character contrast (arrogant vs pathetic)
if has_personality_contrast(script['scenes']):
score += 0.3
# Pacing (not too slow)
if script['target_duration_sec'] <= 60:
score += 0.2
return min(1.0, score)
Version History
- v1.0 (2025-12-21): Initial release with Korean meme database