Skip to main content
Glama
loveld322
by loveld322

中文文档 | 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 auto

Profiles 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.md

  • template.json

  • contact-sheet.jpg

  • transcript.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 build

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 tools
analyze_videoC

提交一条视频分享链接并立即返回持久化任务 ID。

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
profileNobalanced
providerNoauto

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

获取已完成任务的结果目录和四个标准文件路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

查询视频分析任务的当前状态和结构化错误。

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 3 tool updatesv0.1.0
    • First observedanalyze_video
    • First observedget_analysis_result
    • First observedget_analysis_status

TDQS

A3.5/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers