viral-video-blueprint
This server provides an asynchronous interface to analyze viral social media videos from Douyin, Xiaohongshu, or Bilibili and extract reusable production blueprints. You can:
Submit an analysis job by providing a video share link, optionally choosing a processing profile (
fast,balanced,deep) and an AI provider (auto,none,openai,gemini,ollama). You receive a persistent job ID.Check job status using the job ID to get the current state and any structured errors.
Retrieve results once the job is complete, getting the output directory and paths to four standard deliverables:
analysis.md(video breakdown),template.json(editing blueprint),contact-sheet.jpg(labeled frames), andtranscript.srt(timestamped speech).Manage jobs with persistent storage under
~/.viral-video-blueprint/or a customVVB_DATA_DIR.
Enables analyzing videos from Bilibili share links, extracting shot, caption, speech, rhythm, BGM, and visual evidence into a reusable blueprint.
Provides local multimodal reasoning for semantic hook, story-arc, and asset-slot analysis using a loopback-only Ollama instance.
Provides multimodal reasoning support for semantic hook, story-arc, and asset-slot analysis based on extracted video evidence, with validation and repair.
Identifies non-authoritative BGM candidates via ShazamIO, suggesting potential music tracks for the video blueprint.
Enables analyzing videos from Xiaohongshu share links, extracting shot, caption, speech, rhythm, BGM, and visual evidence into a reusable blueprint.
中文文档 | English
Viral Video Blueprint
Turn one Douyin, Xiaohongshu, or Bilibili share link into a reusable video blueprint. The tool downloads a single authorized public video, extracts evidence about shots, captions, speech, rhythm, BGM candidates, and visual elements, then produces:
analysis.md— a human-readable breakdown;template.json— a versioned reusable editing blueprint;contact-sheet.jpg— labeled representative frames;transcript.srt— timestamped speech transcription.
The source video, extracted audio, and temporary frames are deleted after success or failure. Local MP4 input, profile crawling, watermark removal, voice cloning, and media redistribution are intentionally unsupported.
Quick start
Requirements: Python 3.11/3.12, uv, and FFmpeg.
git clone https://github.com/loveld322/viral-video-blueprint.git
cd viral-video-blueprint
uv sync --all-extras --dev
uv run viral-video doctor
uv run viral-video analyze "https://b23.tv/your-authorized-video"Results are written to ./viral-video-results/.
uv run viral-video analyze "share-link" \
--output . \
--profile balanced \
--provider autoProfiles are fast, balanced, and deep. Provider choices are auto,
none, openai, gemini, and ollama.
Related MCP server: Wanyi Watermark Remover
Use as a Codex Skill
Install the repository and link the bundled Skill into Codex. The example uses
$HOME so it works on any machine; choose another checkout location if you
prefer.
git clone https://github.com/loveld322/viral-video-blueprint.git \
"$HOME/Documents/viral-video-blueprint"
cd "$HOME/Documents/viral-video-blueprint"
mkdir -p "$HOME/.codex/skills"
(
skill_source="$HOME/Documents/viral-video-blueprint/skills/replicate-viral-video"
skill_target="$HOME/.codex/skills/replicate-viral-video"
if [ -e "$skill_target" ] || [ -L "$skill_target" ]; then
printf 'Refusing to overwrite existing Skill: %s\n' "$skill_target" >&2
exit 1
fi
ln -s "$skill_source" "$skill_target"
)The command stops without changing anything if
~/.codex/skills/replicate-viral-video already exists, including as a broken
symbolic link. Inspect that path before continuing. Restart Codex after
creating the link so it discovers the Skill.
A symbolic-link installation automatically discovers the checkout from the
Skill's resolved path, including checkouts outside ~/Documents. If you copy
the Skill directory instead of linking it, set
VVB_PROJECT_DIR=/absolute/path/to/viral-video-blueprint in the Codex
environment; a detached copy cannot infer its source checkout.
Then use this prompt (replace every placeholder):
Use $replicate-viral-video to analyze this video link: <link>.
My new topic: <topic>
My product/business: <description or material path>
Target customers: <audience>
Desired action: <DM, lead form, consultation, or purchase>
Please produce a business-specific script, shot-by-shot replication table,
asset checklist, editing settings, and CTA. Keep the method and pacing, while
replacing the original people, copy, logos, watermarks, and copyrighted assets.The Skill accepts one authorized HTTPS share link from Douyin, Xiaohongshu, or
Bilibili, runs the project from skills/replicate-viral-video, and verifies
these four outputs before adapting them:
analysis.mdtemplate.jsoncontact-sheet.jpgtranscript.srt
Version 1 produces an analysis and production blueprint; it does not render a finished video.
Multimodal reasoning
Without a model, the pipeline still produces deterministic shot, text, audio,
and timing analysis with a conservative template. To get semantic hook,
story-arc, and asset-slot analysis, copy .env.example and configure OpenAI,
Gemini, or local Ollama.
Only compressed representative frames and structured evidence are sent to a
configured model, never the complete source video. Provider output is validated
against VideoBlueprint, checked for evidence references, and repaired at most
once. Model failure falls back to the deterministic deliverables.
MCP for Codex, Marvis, and AionUi
The MCP server exposes:
analyze_video(url, profile, provider);get_analysis_status(job_id);get_analysis_result(job_id).
Example client configuration:
{
"mcpServers": {
"viral-video-blueprint": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/viral-video-blueprint",
"run",
"viral-video-mcp"
]
}
}
}MCP uses local stdio by default. Jobs persist under
~/.viral-video-blueprint/, or under VVB_DATA_DIR when configured.
Supported extraction
yt-dlp primary downloader with platform-specific external fallbacks;
ffprobe, FFmpeg, and PySceneDetect for duration, shots, frames, and audio;
faster-whisper for word-timestamp transcription;
PaddleOCR for on-screen text;
librosa for BPM, beats, and energy;
ShazamIO for non-authoritative BGM candidates;
OpenAI-compatible, Gemini, or loopback-only Ollama reasoning.
Optional media dependencies are installed by uv sync --all-extras. The
offline CI suite uses generated media and performs no live platform download.
Development
uv sync --dev
uv lock --check
uv run ruff check src/ tests/
uv run mypy src/
uv run pytest -q
uv buildLegal and safety boundary
Reuse structure, pacing, shot language, public editing presets, and properly licensed music. Replace the original people, script, logos, watermarks, screenshots, brand identity, and copyrighted assets. Do not clone a real voice, extract the original narration, remove watermarks, or redistribute source music. A detected song may be reused only when your platform library or license permits it.
Licensed under Apache-2.0. See LICENSE.
Available Tools
3 toolsanalyze_videoC
提交一条视频分享链接并立即返回持久化任务 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| profile | No | balanced | |
| provider | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals that the tool immediately returns a persistent task ID, implying asynchronous processing, but it does not disclose validation behavior, error handling, authentication needs, or what happens after submission. This is insufficient for a tool that kick-starts a multi-step workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the action (submit a video sharing link) and the key output (persistent task ID). Every word earns its place, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters, no annotations, and is part of an async workflow with sibling tools. The description only covers the basic submission action and does not explain parameter semantics, the async flow, or how the returned task ID connects to the sibling tools. The existence of an output schema does not compensate for these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has three parameters (url, profile, provider) with zero description coverage. The description only paraphrases url as 'video sharing link' and says nothing about profile or provider, leaving their meaning and acceptable values completely unexplained. This is a critical gap for a tool with low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits a video sharing link and returns a persistent task ID, distinguishing it from the sibling status/result retrieval tools. However, it doesn't explicitly name those alternatives within the description, so it's slightly less clear than a fully self-contained purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the siblings (get_analysis_status, get_analysis_result) or the typical async workflow (submit, then poll status, then fetch result). The mention of a persistent task ID hints at async usage, but no explicit context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analysis_resultA
获取已完成任务的结果目录和四个标准文件路径。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool retrieves a result directory and exactly four standard file paths, and that it applies to completed tasks. However, it does not mention error behavior (e.g., what happens if the task is incomplete) or any side effects, though the read-only nature is implied by '获取'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that front-loads the action and key result. Every word earns its place, with no repetition of schema information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, output schema present), so the description is minimally viable. However, it misses guidance on the relationship with sibling tools, such as using get_analysis_status to confirm completion before calling this, and it omits error context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single parameter job_id, but it does not explain the parameter's format, source, or how to obtain it. The phrase 'completed task' hints that job_id should be a completed analysis job's ID, but that is minimal compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('获取') and resource ('已完成任务的结果目录和四个标准文件路径'), clearly distinguishing it from sibling tools like get_analysis_status (which reports status) and analyze_video (which starts analysis). The scope is precise: it returns paths for a completed task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the tool is for completed tasks, which implies it should be used after task completion, but it does not explicitly name alternatives or say to check status via get_analysis_status first. No clear when-not-to-use guidance or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analysis_statusC
查询视频分析任务的当前状态和结构化错误。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return content (status and structured errors) but does not state whether the operation is read-only, what happens for non-existent jobs, or any authentication/rate-limit considerations. The query nature implies read-only but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that packs essential information without wasted words. It clearly states the action and the object, making it appropriately sized for a simple status-query tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (which reduces the need to explain return values), the description lacks crucial contextual cues: when to use it, what `job_id` refers to, and any prerequisites. Given the tool's minimal schema, the description is incomplete for effective selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the `job_id` parameter at all. Schema coverage is 0%, so the description must compensate by explaining what the parameter means or how to obtain it, but it does not. The only implicit connection is that a 'video analysis task' requires an ID, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries the current status and structured errors of a video analysis task, using a specific verb ('查询') and resource ('视频分析任务'). This distinguishes it from siblings like `analyze_video` (which starts analysis) and `get_analysis_result` (which retrieves results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention that it should be called after initiating an analysis or that it is for monitoring progress. Sibling tool names offer context but are not referenced in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
analyze_video - First observed
get_analysis_result - First observed
get_analysis_status
TDQS
Scored across 3 tools
Each tool has a distinct role: analyze_video initiates a task, get_analysis_status polls its progress, and get_analysis_result retrieves the output. There is no overlap in their purposes, making selection unambiguous.
All tools follow a consistent verb_noun pattern: analyze_video, get_analysis_status, get_analysis_result. The verbs are descriptive and the nouns align with the resource or operation, making the naming predictable and easy to follow.
With exactly 3 tools, the set is tightly scoped to the asynchronous video analysis workflow. Each tool serves a necessary step in the lifecycle (submit, check status, fetch result), and none are redundant or missing.
The tool set covers the complete flow for a single analysis job: submission, status polling, and result retrieval. There are no obvious gaps such as missing cancellation or listing capabilities, as the domain is narrowly defined and fully served.
Maintenance
Related MCP Connectors
Video analytics for TikTok, Instagram, and YouTube. Track, analyze, and discover content.
Turn a TikTok/Instagram/YouTube link into text for your AI: metadata, transcript and image OCR.
Short-form video analytics and trend intelligence for TikTok, YouTube, and Instagram
Video analysis AI: transcripts, summaries, visual scenes/shots, clips, answers in natural language.
Related MCP Servers
- FlicenseAqualityFmaintenanceEnables AI assistants to create and edit professional videos through natural language by automating JianYing (CapCut) video production workflows. Supports adding media segments, effects, transitions, animations, and exporting editable project files.20282-
- AlicenseAqualityBmaintenanceExtracts watermark-free videos and images from Douyin (TikTok) and Xiaohongshu (RedNote) share links, with optional AI-powered video transcription support.423Apache 2.0
- AlicenseBqualityCmaintenanceAnalyze YouTube, TikTok, and Instagram videos from URL. Extracts transcripts, generates AI insights, and pulls tutorial steps from any video link.183MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates with Jianying (CapCut) and Chinese LLMs to automate short drama video editing, including commentary generation, remix creation, and draft import.17MIT