
Report Generator
- 2 installs
- 411 repo stars
- Updated August 4, 2026
- bytedance/agentkit-samples
Report Generator is a Claude skill (ByteDance AgentKit sample) that merges video breakdown and hook-analysis data into a Markdown video-analysis report.
About
Report Generator is a ByteDance AgentKit skill that merges video breakdown data and optional hook-analysis results into a professional Markdown video-analysis report. Running generate_report.py outputs sections for basic info, first-three-seconds hook scoring, a shot overview table, BGM analysis, scene analysis and platform recommendations. Developers use it to deliver a structured video analysis document to clients or teams.
- Merges video breakdown and hook analysis into a Markdown report
- Report covers hook score, shot overview, BGM and scene analysis
- Runs a bundled generate_report.py script
Report Generator by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,166 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
report-generator capabilities & compatibility
- Capabilities
- report generator · video analysis · document generation
- Use cases
- documentation · data analysis · marketing
- Pricing
- Free
What report-generator says it does
视频分析报告生成技能将分镜拆解数据和(可选的)钩子分析结果整合为一份专业的 Markdown 格式分析报告。
分镜概览最多展示前 10 个分镜
画面内容描述超过 40 字符会自动截断
npx skills add https://github.com/bytedance/agentkit-samples --skill report-generatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 411 |
| Last updated | August 4, 2026 |
| Repository | bytedance/agentkit-samples ↗ |
What it does
Merge video breakdown and hook-analysis data into a Markdown video-analysis report.
Who is it for?
Delivering a structured Markdown video-analysis report from breakdown and hook data.
Skip if: Doing the breakdown or hook scoring itself; it only formats supplied JSON into a report.
When should I use this skill?
You have video breakdown JSON (and optionally hook analysis) and need a formatted report.
What you get
A complete Markdown video-analysis report with hook score, shot overview, BGM and scene sections.
- Markdown video-analysis report
By the numbers
- shot overview shows up to 10 shots
- content descriptions auto-truncate past 40 characters
Files
视频分析报告生成 (Report Generator)
概述
视频分析报告生成技能将分镜拆解数据和(可选的)钩子分析结果整合为一份专业的 Markdown 格式分析报告。报告包含视频基本信息、前三秒钩子评分、分镜概览表格、BGM 分析、场景分析和平台推荐等章节。
适用场景
1. 视频分析交付:为客户或团队生成完整的视频分析文档 2. 创意复盘:生成结构化的视频内容复盘报告 3. 竞品报告:批量生成竞品视频分析报告
使用步骤
完整报告(分镜 + 钩子分析)
# 1. 准备分镜拆解数据和钩子分析数据(JSON 文件)
# 2. 生成报告
python scripts/generate_report.py breakdown.json hook_analysis.json
# 3. 保存到文件
python scripts/generate_report.py breakdown.json hook_analysis.json > report.md仅分镜报告(无钩子分析)
python scripts/generate_report.py breakdown.json报告结构
生成的报告包含以下章节:
# 视频分析报告
## 基本信息
- 视频时长、分镜数量、分辨率
## 前三秒钩子分析(核心)
- 综合评分
- 5维度评分表格
- 钩子类型
- 优势/不足/优化建议
- 留存预测
## 分镜概览
- 前10个分镜的概览表格
## BGM 分析
- 音乐风格、情绪基调、节拍
## 场景分析
- 主要场景、视频风格、目标受众
- 平台推荐
报告生成时间输入格式
breakdown.json(必需)
{
"duration": 30.5,
"segment_count": 12,
"resolution": "1920x1080",
"segments": [...],
"bgm_analysis": {
"music_style": {"primary": "流行"},
"emotion": {"primary": "欢快"},
"tempo": {"bpm_estimate": 120, "pace": "中速"}
},
"scene_analysis": {
"primary_scene": "室内",
"video_style": {"overall": "生活方式", "target_audience": ["年轻人"]},
"platform_recommendations": [...]
}
}hook_analysis.json(可选)
{
"overall_score": 7.5,
"visual_impact": 8.0,
"visual_comment": "评价...",
"language_hook": 7.0,
"language_comment": "评价...",
"emotion_trigger": 7.5,
"emotion_comment": "评价...",
"information_density": 7.0,
"info_comment": "评价...",
"rhythm_control": 8.0,
"rhythm_comment": "评价...",
"hook_type": "好奇型",
"strengths": ["优点1", "优点2"],
"weaknesses": ["不足1"],
"suggestions": ["建议1", "建议2"],
"retention_prediction": "中:50-70%,因为..."
}输出格式
Markdown 格式的完整报告文本,直接输出到 stdout。
示例
# 完整流程
python ../video-breakdown-skill/scripts/process_video.py "https://example.com/video.mp4" > breakdown.json
cat breakdown.json | python ../hook-analyzer-skill/scripts/analyze_hook_segments.py - > hooks.json
# (hooks.json 需经 LLM 评分后得到 hook_analysis.json)
python scripts/generate_report.py breakdown.json hook_analysis.json > report.md注意事项
1. 如果缺少 hook_analysis 数据,报告中钩子分析章节将显示"暂无数据" 2. 分镜概览最多展示前 10 个分镜 3. 报告自动添加生成时间戳 4. 画面内容描述超过 40 字符会自动截断
故障排除
| 问题 | 解决方案 |
|---|---|
| 钩子分析为空 | 确认传入了 hook_analysis.json 文件 |
| 分镜表格为空 | 确认 breakdown.json 包含 segments 字段 |
| BGM/场景显示 N/A | 分镜拆解服务可能未返回此数据 |
"""
整合分镜拆解数据和钩子分析结果,生成 Markdown 视频分析报告。
Usage:
python scripts/generate_report.py <breakdown_json> [hook_analysis_json]
Examples:
python scripts/generate_report.py breakdown.json hook_analysis.json
python scripts/generate_report.py breakdown.json
python scripts/generate_report.py breakdown.json hook.json > report.md
"""
import json
import sys
from datetime import datetime
def generate_video_report(breakdown_data: dict, hook_analysis: dict = None) -> str:
"""
整合分镜拆解结果和钩子分析结果,生成 Markdown 视频分析报告。
Args:
breakdown_data: 分镜拆解的完整结果数据
hook_analysis: 前三秒钩子分析结果(可选)
Returns:
str: Markdown 格式报告
"""
if hook_analysis is None:
hook_analysis = {}
duration = breakdown_data.get("duration", 0)
segment_count = breakdown_data.get("segment_count", 0)
resolution = breakdown_data.get("resolution", "N/A")
bgm = breakdown_data.get("bgm_analysis") or {}
scene = breakdown_data.get("scene_analysis") or {}
# BGM 信息
music_style = bgm.get("music_style", {}).get("primary", "N/A") if bgm else "N/A"
emotion = bgm.get("emotion", {}).get("primary", "N/A") if bgm else "N/A"
tempo = bgm.get("tempo", {}).get("bpm_estimate", "N/A") if bgm else "N/A"
tempo_pace = bgm.get("tempo", {}).get("pace", "N/A") if bgm else "N/A"
# 场景信息
primary_scene = scene.get("primary_scene", "N/A") if scene else "N/A"
video_style = scene.get("video_style", {}).get("overall", "N/A") if scene else "N/A"
target_audience = (
", ".join(scene.get("video_style", {}).get("target_audience", []))
if scene
else "N/A"
)
hook_section = _build_hook_section(hook_analysis)
platform_section = _build_platform_section(scene)
segments_section = _build_segments_overview(breakdown_data.get("segments", []))
report = f"""# 视频分析报告
## 基本信息
- **视频时长**: {duration:.1f}秒
- **分镜数量**: {segment_count}个
- **分辨率**: {resolution}
---
{hook_section}
---
## 分镜概览
{segments_section}
---
## BGM 分析
- **音乐风格**: {music_style}
- **情绪基调**: {emotion}
- **节拍**: {tempo} BPM({tempo_pace}节奏)
---
## 场景分析
- **主要场景**: {primary_scene}
- **视频风格**: {video_style}
- **目标受众**: {target_audience}
{platform_section}
---
**报告生成时间**: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
"""
return report
def _build_hook_section(hook_analysis: dict) -> str:
if not hook_analysis:
return "## 前三秒钩子分析\n\n暂无钩子分析数据。"
overall = hook_analysis.get("overall_score", 0)
hook_type = hook_analysis.get("hook_type", "N/A")
retention = hook_analysis.get("retention_prediction", "N/A")
scores_table = f"""| 维度 | 得分 | 评价 |
|------|------|------|
| 视觉冲击力 | {hook_analysis.get("visual_impact", 0)}/10 | {hook_analysis.get("visual_comment", "")} |
| 语言钩子 | {hook_analysis.get("language_hook", 0)}/10 | {hook_analysis.get("language_comment", "")} |
| 情绪唤起 | {hook_analysis.get("emotion_trigger", 0)}/10 | {hook_analysis.get("emotion_comment", "")} |
| 信息密度 | {hook_analysis.get("information_density", 0)}/10 | {hook_analysis.get("info_comment", "")} |
| 节奏掌控 | {hook_analysis.get("rhythm_control", 0)}/10 | {hook_analysis.get("rhythm_comment", "")} |"""
strengths = hook_analysis.get("strengths", [])
weaknesses = hook_analysis.get("weaknesses", [])
suggestions = hook_analysis.get("suggestions", [])
strengths_text = "\n".join(f"- {s}" for s in strengths) if strengths else "- 暂无"
weaknesses_text = (
"\n".join(f"- {w}" for w in weaknesses) if weaknesses else "- 暂无"
)
suggestions_text = (
"\n".join(f"{i + 1}. {s}" for i, s in enumerate(suggestions))
if suggestions
else "1. 暂无"
)
return f"""## 前三秒钩子分析(核心)
### 综合评分: {overall}/10
{scores_table}
### 钩子类型
**{hook_type}**
### 优势
{strengths_text}
### 不足
{weaknesses_text}
### 优化建议
{suggestions_text}
### 留存预测
**{retention}**"""
def _build_platform_section(scene: dict) -> str:
if not scene:
return ""
recommendations = scene.get("platform_recommendations", [])
if not recommendations:
return ""
lines = ["### 平台推荐"]
for rec in recommendations:
platform = rec.get("platform", "N/A")
suitability = rec.get("suitability", "N/A")
reason = rec.get("reason", "")
lines.append(f"- **{platform}**(适合度: {suitability}): {reason}")
return "\n".join(lines)
def _build_segments_overview(segments: list) -> str:
if not segments:
return "暂无分镜数据。"
lines = [
"| 镜号 | 时间 | 景别 | 运镜 | 功能标签 | 画面内容 |",
"|------|------|------|------|----------|----------|",
]
for seg in segments[:10]:
index = seg.get("segment_index", "-")
start = seg.get("start_time", 0)
end = seg.get("end_time", 0)
time_range = f"{start:.1f}s-{end:.1f}s"
shot_type = seg.get("shot_type", "-")
camera = seg.get("camera_movement", "-")
func_tag = seg.get("function_tag", "-")
visual = seg.get("visual_content", "-")
if len(visual) > 40:
visual = visual[:37] + "..."
lines.append(
f"| {index} | {time_range} | {shot_type} | {camera} | {func_tag} | {visual} |"
)
if len(segments) > 10:
lines.append(f"\n*(仅展示前10个分镜,共{len(segments)}个)*")
return "\n".join(lines)
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python generate_report.py <breakdown_json> [hook_analysis_json]")
sys.exit(1)
with open(sys.argv[1], "r", encoding="utf-8") as f:
bd_data = json.load(f)
hook_data = None
if len(sys.argv) > 2:
with open(sys.argv[2], "r", encoding="utf-8") as f:
hook_data = json.load(f)
report = generate_video_report(bd_data, hook_data)
print(report)
Related skills
FAQ
Is hook analysis required?
No. The docs note that if hook_analysis data is missing, the hook section shows 'no data' and only the breakdown report is produced.
How many shots appear in the overview?
The shot overview shows at most the first 10 shots.