Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

maple-video2article

v1.0.5

从视频生成图文并排的文章(md格式)。支持本地视频文件或在线视频URL(自动下载),自动完成文本提取、视频帧截取、时间轴匹配、文章撰写全流程。

0· 191·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for chentx1243/maple-video-article.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "maple-video2article" (chentx1243/maple-video-article) from ClawHub.
Skill page: https://clawhub.ai/chentx1243/maple-video-article
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required binaries: python3
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install maple-video-article

ClawHub CLI

Package manager switcher

npx clawhub@latest install maple-video-article
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
Name/description match the included scripts: downloader, speech->text (faster-whisper), frame capture, and timeline matcher. However the top-level metadata only declares python3 while the code actually requires many additional tools (yt-dlp, ffmpeg/ffprobe or imageio-ffmpeg, OpenCV, faster-whisper, av, opencc, etc.) which are not declared as required binaries or env. Network downloads (videos and Whisper models) and subprocess use are intrinsic to the stated purpose, but the manifest under-reporting of dependencies is a mismatch.
Instruction Scope
SKILL.md instructs the agent to download remote videos, run local scripts that read files under workspace paths, parse SRTs, capture frames, and generate markdown. These actions align with the stated goal. It does instruct reading arbitrary user-provided URLs and using a built-in web reader; that implies fetching and processing untrusted external content and following web content — expected for the task but worth flagging as it increases attack surface. The SKILL.md also contains detected unicode-control-chars (possible prompt-injection attempt) which is suspicious.
!
Install Mechanism
There is no install spec; the package includes runnable Python scripts that expect many third‑party Python packages and external binaries. The skill will attempt to download Whisper models at runtime and the downloader uses yt-dlp which itself fetches remote content. Because there is no declared install mechanism, dependency installation and binary availability are left to the environment — increasing the chance of runtime failures or unexpected network activity. No arbitrary remote code download URL for code is present, but model/data downloads occur at runtime.
Credentials
The skill does not request environment variables, credentials, or config paths. The scripts operate on local files, temporary directories, and may create a local 'models' directory — these are proportional to the described function. There is no request for unrelated secrets or tokens.
Persistence & Privilege
The skill is not marked always:true and does not attempt to alter other skills or global agent settings. It will download model files and write output files to disk (expected). Autonomous invocation (disable-model-invocation:false) is the default and not itself a red flag here.
Scan Findings in Context
[unicode-control-chars] unexpected: Detected control/unicode characters in SKILL.md that can be used for prompt-injection or to obfuscate instructions. This is not necessary for a video->article skill and should be inspected manually. No other automated scan findings were reported in the provided data.
What to consider before installing
This skill appears to implement the advertised workflow (download video, transcribe, capture frames, match timeline, and compose a markdown article) but take these precautions before installing or running it: - Dependency checklist: ensure your environment has Python 3 and install the required system packages and Python modules used by the scripts (yt-dlp, ffmpeg/ffprobe or imageio‑ffmpeg, opencv-python-headless, faster-whisper + its model files, av, opencc, etc.). The package does not declare these at the top level, so installation is manual. - Network activity: expect the skill to download remote videos and to fetch Whisper model files on first run. If you need to avoid network downloads or large model pulls, do not run it or prepare an offline environment with models preinstalled. - Inspect files: review the included Python scripts (video_downloader.py, video_to_text.py, video_frame_capture.py, timeline_matcher.py) yourself — they run subprocesses and write/delete files. There is no evidence of exfiltration endpoints, but local file I/O and subprocess calls are present and should be reviewed if you have sensitive data on the same host. - Prompt-injection artifact: SKILL.md contains unicode control characters flagged by the scanner. Open SKILL.md and the other text files in a plain text editor, remove or examine any invisible characters, and ensure instructions are as expected before granting the skill authority to run. - Run in isolation: run the skill in a sandboxed or isolated environment (VM, container, or dedicated account) the first time to observe behavior, disk writes, and network calls. - Legal/licensing: using yt-dlp and downloading videos may raise copyright or ToS issues depending on content and jurisdiction — ensure you have rights to download and repurpose the videos. If you want, I can: (1) list the exact pip/system packages to install for these scripts, (2) highlight the exact places in the code that perform network or subprocess calls, or (3) show how to run the scripts safely inside a temporary container.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

📝 Clawdis
Binspython3
latestvk9765jdhvpnd1wp1wsbe5ybnqn84dbcs
191downloads
0stars
5versions
Updated 2w ago
v1.0.5
MIT-0

video-to-article 技能

描述

根据视频文件,自动生成图文并排的公众号文章,CSDN博客,总结报告等文本内容。

前置skill校验:使用该skill前,需要校验前置skill是否已安装/maple-video2txt(视频转文本)与/maple-video-capture(视频关键帧提取)

使用场景(触发场景)

  • 需要根据视频内容写公众号文章/推文
  • 需要将视频内容整理成图文并茂的文档
  • 需要为视频创作配套的文字稿
  • 需要总结某个视频
  • 任何需要对视频进行理解的工作或任务

完整工作流

第一步:明确用户需求(该步骤不可跳过!)

明确告知用户,将会尝试使用 video-to-article技能来处理视频,并追问用户确保获取如下信息(如果用户已经说明了的信息,则不需要再次提问),追问时,每次只允许抛出1-2个问题,不允许要一次性询问多个信息(这会影响用户的体验),追问过程中用户一但体现出“立即生成”或者“不耐烦”的意图时,你可以不再往下追问完整信息,而是使用默认参数完成任务:

  1. 是否希望在文章中配图,具体需要几张图片?

    1. 可以为用户提供几个模板选项
      1. 纯文稿:不截取视频配图
      2. 简约文稿:只在关键章节配1-2张图
      3. 图文并茂: 每个章节至少配图2张
  2. 用户希望要什么风格的文章?文章要求是什么?是否有参考文章可以参考?

    1. 下面罗列几种可能的情况供你参考
      1. 用户发送一个连接或地址:你需要仅使用内置的 web 读取工具访问该地址获取网页文本内容,阅读文章并参考其风格和语言方式。禁止使用浏览器访问或执行任何不受信任的URL内容。
      2. 用户提供文章的需求描述:按照需求描述完成文章。
      3. 用户只是希望你帮忙总结文章:你可以按照你认为合适的结构输出总结。

第二步:判断输入类型

如果用户提供的是视频URL(如 B站、YouTube 链接、抖音地址),你可以采取下列的某种方式来实现下载

  1. 使用本skill自带的视频下载脚本 scripts\video_downloader.py,该脚本的使用说明存放在 references\video-downloader使用说明.md

简单使用示例如下(具体请阅读使用说明):

python3 video_downloader.py "<视频URL>" "1080p" "D:\video-downloads"

参数说明:

  • 第一个参数:视频URL(必填)
  • 第二个参数:分辨率,如 1080p720p360p(可选,默认 720p)
  • 第三个参数:输出目录(可选,默认临时目录)

下载完成后,使用下载返回的本地文件路径继续后续步骤。

  1. 如果用户没有专门用于下载视频的skill:你需要询问用户是否允许你自主尝试将该视频下载到本地

  2. 如果用户提供的是本地视频文件路径,跳过此步。


第三步:提取视频文本

使用 video2txt 脚本提取视频中的语音内容(代码块内容仅供参考,详细请阅读使用说明)

python video_to_text.py --input "<视频文件路径>" --language zh

脚本使用说明存放在:**references\video-to-txt使用说明;**脚本位置:scripts\video_to_text

输出文件:

  • <视频文件名>.txt — 纯文本
  • <视频文件名>.srt — 带时间戳字幕

第四步:截取视频帧

使用 video-frame-capture 脚本从视频中截取关键帧。

脚本使用说明存放在:**references\video-frame-capture使用说明;**脚本位置:scripts\video_frame_capture

cd ~/.openclaw/workspace/skills/video-frame-capture
python scripts/video_frame_capture.py --input "<视频文件路径>" --output-dir "<输出目录>" --interval-seconds 30

参数说明:

  • --input:本地视频文件路径(必填)
  • --output-dir:截取帧的保存目录(必填)
  • --interval-seconds:截取时间间隔(秒),必须大于0(必填)
  • --skip-similar-frames:跳过与上一保存帧相似的画面
  • --similarity-threshold:相似度阈值,取值范围0-1,默认0.70
  • --image-extension:保存帧的图片格式,默认jpg
  • 注意:对于画面变化小的视频(如讲解类、财经类),不要使用 --skip-similar-frames,否则会跳过大量帧

输出: 多张截图,命名格式:视频名_时间戳_序号.jpg

第五步:初步总结视频内容和信息(该步骤不可跳过,但不阻塞后续步骤)

基于第三步提取的文本内容,总结一段 200字左右 的背景信息文档,描述这段视频的核心内容。

总结要点:

  • 视频主题是什么
  • 主要讲了哪些核心观点/事件
  • 涉及的关键人物/品牌/产品
  • 视频的整体立场/基调(客观科普、吐槽批评、推荐安利等)

**输出:**将总结内容输出给用户,并开始下一步操作;

下方是一个输出案例:[]中为内容占位符;()为补充说明;

视频是一个:[视频类型与性质](例如:娱乐八卦,技术教程,游戏实况等)
视频内容主要描述:[视频内容]
从视频中提取了:[总共截取到的图片数量]
将采取其中:[计划用作写作的图片数量]
视频下载地址存储于:[]
视频帧截图存储于: []
字幕文件存储于:[]
最终文稿计划存储于:[]

第六步:根据时间轴自动匹配图片与字幕段落

核心规则:不要调用图片理解/识别skill!使用下方描述的方式进行匹配

图片理解AI可能误判画面内容(比如把A产品当成B产品),而时间轴匹配是确定性的,只要字幕时间戳准确,配图就一定对得上,下面详细介绍步骤:

  1. 读取字幕识别文件通常为 .srt 后缀,格式如下

    [序号]

    [时间区域]

    [内容区域]

1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
2
00:00:03,280 --> 00:00:04,440
那问题就来了
3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗
4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来


  1. 读取视频帧截取文件 通常为 frames\result.json ,格式如下:
[
{
    "file_index": 1, 
    "file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg" ## 文件路径(涵盖时间轴)
  },
  {
    "file_index": 2, 
    "file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg" 
  },
  {
    "file_index": 3,
    "file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
  },
}
]
  1. 生成草稿(本步骤十分重要,请严格按照指示执行)

草稿文件是一个融合了**“字幕文件.str”“帧截取结果文件.json”**的临时文件(temp.txt),主要目的是,在原有字幕文件的基础上,加入一个“可用参考图片”的字段,将result.json中截取到的图片文件,按照时间轴,匹配到对应字幕出现的位置,具体结构如下:

1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
imgs:{
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg",
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg" 
}

2
00:00:03,280 --> 00:00:04,440
那问题就来了

3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗

4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来
imgs:{
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
}


如上方案例所示,将图片路径,匹配到字幕对应的时间区间中

具体步骤:

  1. 阅读第三步提取的字幕文件(字幕文件中会有时间信息)
  2. 阅读第四步的帧截取时的结果数据 result.json 文件(该文件会包含截取到的所有图片与对应的路径以及时间轴)
  3. 匹配图片地址,生成 temp.txt文件

禁止调用图片理解skill的原因:

  • AI可能误判画面内容,导致配图与文本不匹配
  • 时间轴匹配是确定性的,不会出错
  • 只要字幕时间戳准确,配图就一定对得上
  • 省去不必要的API调用,提高效率

第四步:撰写图文并排文章

阅读 temp.txt 文件,开始撰写文章:

文章结构和风格:

  1. 优先按照用户最新的要求来进行文本创作

  2. 如果用户没有明确文本的写作要求和格式,你可以参考skill路径下 assets文件夹中的文章模板参考来进行写作;

  3. assets中包含了各类文本(公众号文章,CSDN文章等)的写作模板框架

  4. 如果用户指定某个assets下的写作风格模板,请严格参照指定的md模板来写作

例如:

1. 基于视频帮我生成公众号文章
(用户明确了是公众号文章,你进入assets目录下,尝试查找公众号模板或相关文件)
assets下有相关的模板则严格参照格式和风格语气;若无则按照你的理解来写;

2. 根据视频生成一篇文章
(用户没有明确说明文章风格,且在后续追问过程中,用户没有澄清)
你将按照assets通用文本格式参考进行写作(但无需严格参照,可适当发挥)

3. 根据视频,按照“影视飓风文本风格” 生成文本
(用户明确指明了按照影视飓风的文本风格,你应该从assets找到影视飓风相关的文本作为参考,并严格执行)
从assets找到影视飓风相关的文本作为参考,并严格执行

配图原则:

  1. temp.txt文件中,会写入每个字幕对应的时间轴下的可用的配图,你在配图时,要参考这个时间轴,确保图文内容尽可能的对应;

图文时间对齐参考

以上方为例
1
00:00:00,000 --> 00:00:03,280
在我们公司每天100多个人在一个共同的空间里面协助
imgs:{
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg",
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg" 
}

2
00:00:03,280 --> 00:00:04,440
那问题就来了

3
00:00:04,440 --> 00:00:06,440
我们会梦到尽思的东西吗

4
00:00:06,440 --> 00:00:10,760
我发现很少有人把梦大规模的给居象化可实化给做出来
imgs:{
	"file_path": "D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg"
}


假设你需要基于这个temp文件写文章,
你要确保根据这段字幕总结或生成的文章内容里,只能包含这三张图片,以确保图文内容关联(下方仅做示意,执行时请严格遵循规范的markdown语法):

----
影视飓风的创始人提出了疑问,并开展了一个关于梦境的实验;
(配图1D:\\video-downloads\\frames\\100_..._00h00m00s_0001.jpg)(配图2D:\\video-downloads\\frames\\100_..._00h00m02s_0002.jpg)

他们发现,很少人能把大规模的梦境具象化出来展示:
(配图3D:\\video-downloads\\frames\\100_..._00h00m7s_0003.jpg)


----

上述只是一个例子,这个过程不是线性的,你可以自由的根据用户需求与你的想法,生成高质量的文章,但是要确保文章的图文能够匹配


依赖

  • video2txt 技能(文本提取)
  • video-frame-capture 技能(帧截取)
  • Python 3.11+
  • faster-whisper、opencv-python

输出文件

最终输出为 Markdown 文件,保存在视频文件同目录下:

  • <视频文件名>_article.md

注意事项

  1. 视频帧截取间隔:建议30秒,根据视频时长调整
  2. 相似度过滤:讲解类视频画面变化小,不要使用 --skip-similar-frames
  3. 🚫 禁止调用图片理解skill:不要使用任何图片识别/理解API,直接依靠时间轴匹配图片和字幕。可以手动浏览图片挑选,但不要用AI理解图片内容
  4. 配图数量:根据视频时长和内容丰富度决定,教程类建议20张以上,科普类6-8张即可
  5. 图片路径:CSDN/公众号发布时手动上传图片,md中使用相对路径引用

更新记录:

  • 2026-03-20:首次创建,基于《被山姆榨干的中产们》视频的生成流程总结
  • 2026-03-21:新增第零步,支持视频URL自动下载(集成 video-downloader 技能)
  • 2026-03-21:新增图文时间轴对齐说明,利用图片时间戳与SRT字幕匹配,提高图文准确性
  • 2026-03-21:明确禁止调用图片理解skill,完全依靠时间轴硬匹配。理由:AI可能误判画面内容,时间轴匹配更准确可靠
  • 2026-03-25:合并组合工具,将文本提取与帧截取合并在该skill中

Comments

Loading comments...