Claude Skill

video-downloader

短视频下载器 — 支持抖音、小红书、快手、视频号、B站、YouTube、Instagram 等主流平台无水印视频下载。

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download redfox-data-redfox-community-skills_video-downloader-5e7b435.zip · 379 KB
Part of redfox-data/redfox-community — 66 skills

Install

skills CLI npx skills add https://github.com/redfox-data/redfox-community/tree/main/skills/video-downloader
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install redfox-data-redfox-community@llmmart
Git git clone https://github.com/redfox-data/redfox-community.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole redfox-data/redfox-community collection as a plugin from our marketplace. Git is the plain clone.

README

短视频下载器 / video-downloader


简介

贴上短视频链接就能拿到无水印下载直链,抖音、小红书、快手、B站、YouTube、Instagram 等十多个平台都认,视频和图文都能下载,复制到浏览器就能保存。不用装插件、不用开会员,贴一个链接搞定一个视频,不会让你折腾半天还下载到带水印的版本。

核心价值

  • 贴链即得不费劲:贴上分享链接就能拿到无水印下载直链,一个链接搞定,不用到处找工具。
  • 视频干净无水印:返回的都是无水印视频,收藏、剪辑、二次创作都能直接拿去用。
  • 十多个平台全覆盖:抖音、小红书、快手、视频号、B站、YouTube、Instagram、X、TikTok、Threads、Facebook、Vimeo,手机分享链接和电脑网页链接都能识别。
  • 图文也能下载:除了视频,图文帖子里的所有图片也能一并下载保存,按序号自动命名。
  • 贴链即下进度可见:配置 API Key 后贴上链接即可下载,进度条实时显示,大文件也不怕。

适用对象

  • 🎬 创作者 / 剪辑师 — 快速保存各平台上的视频素材,用于二次创作
  • 📚 内容收藏者 — 把喜欢的视频、图文备份到本地,不怕原帖被删
  • 🔍 运营 / 研究者 — 下载竞品或热点内容,慢慢分析

功能特性

核心功能

  • 视频解析:粘贴任意支持平台的视频链接,一键解析出无水印视频下载链接。
  • 图文下载:支持图文类型内容,自动下载所有图片并按序号命名。
  • 跨平台支持:覆盖抖音、小红书、快手、视频号、B站、YouTube、Instagram、X、TikTok、Threads、Facebook、Vimeo 等十多个主流平台。
  • 链接自适应:手机分享短链、电脑网页链接等多种格式都能自动识别。
  • 进度显示:下载过程有进度条和百分比,大文件也不怕。

支持平台

平台 链接格式示例
🎵 抖音 https://v.douyin.com/xxxx
📕 小红书 http://xhslink.com/xxx
📱 快手 https://v.kuaishou.com/xxxx
📺 视频号 https://weixin.qq.com/sph/xxxx
📺 B站 https://b23.tv/xxxx
▶️ YouTube https://youtu.be/xxx
📷 Instagram https://www.instagram.com/p/xxx
🐦 X (Twitter) https://x.com/xxx/status/xxx
🎵 TikTok https://www.tiktok.com/@xxx/video/xxx
🧵 Threads https://www.threads.net/@xxx/post/xxx
📘 Facebook https://www.facebook.com/xxx/videos/xxx
🎬 Vimeo https://vimeo.com/xxxxx

密钥获取与安全说明

  • 本技能需要使用环境变量:REDFOX_API_KEY。
  • REDFOX_API_KEY 由 红狐 hub (https://redfox.hk) 提供。
  • 请前往 红狐 hub 注册账号,获取 REDFOX_API_KEY。
  • 配置设备环境变量 REDFOX_API_KEY 后使用本技能。
  • 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
  • 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。

使用指南

直接用自然语言描述需求,无需记忆命令。

常用说法速查

意图 示例话术 效果
下载抖音视频 「下载这个视频 https://v.douyin.com/xxxxxx/」 解析链接并下载无水印视频
保存小红书内容 「帮我把这条小红书存下来 http://xhslink.com/xxx」 解析后下载视频或图文
下载 YouTube 视频 「下载这条 YouTube 视频 https://youtu.be/xxx」 解析并下载视频文件
保存 Instagram 帖子 「把这个 IG 帖子存下来 https://www.instagram.com/p/xxx」 解析并下载视频或图文

输出示例

解析完成后,你将收到如下格式的结果:

✅ 下载完成!

📱 平台:抖音 📝 标题:视频标题 🎬 类型:Video

文件已保存到 ~/Downloads/QoderVideos/视频标题.mp4 (12.3 MB)


使用场景

场景 角色 示例问法 收益
素材收集 剪辑师 「下载这条抖音视频」 快速拿到无水印素材,直接进剪辑流程
内容备份 收藏者 「保存这个小红书帖子」 原帖删除也不怕,本地永久留存
热点分析 运营 「把这个爆款视频下下来」 离线反复观看,拆解爆款逻辑
跨平台存档 研究者 「下载这几个平台的视频」 十多个平台都能下载,一个工具搞定

Skill manifest

短视频下载器

通过 redfox.hk API 解析并下载主流短视频平台的无水印视频/图文。


能力概述

  • 平台支持:抖音、小红书、快手、视频号、B站、YouTube、Instagram、X(Twitter)、TikTok、Threads、Facebook、Vimeo 等主流平台
  • 内容类型:视频(mp4)、图文(jpg/png,暂不支持小红书图文)
  • 输入方式:粘贴页面分享链接即可(每次仅限一个链接,不支持批量上传)
  • 去水印:API 自动返回无水印直链

链接使用规范

支持的链接格式

本工具仅接受以下平台的页面分享链接,传入前会自动校验链接是否匹配支持的格式:

平台 链接格式示例
🎵 抖音 https://v.douyin.com/xxxx / douyin.com/video/xxx
📕 小红书 http://xhslink.com/xxx / xhslink.cn/xxx
📱 快手 https://v.kuaishou.com/xxxx
📺 视频号 https://weixin.qq.com/sph/xxxx
📺 B站 https://b23.tv/xxxx / bilibili.com/video/xxx
▶️ YouTube https://youtu.be/xxx / youtube.com/watch?v=xxx
📷 Instagram https://www.instagram.com/p/xxx
🐦 X (Twitter) https://x.com/xxx/status/xxx
🎵 TikTok https://www.tiktok.com/@xxx/video/xxx
🧵 Threads https://www.threads.net/@xxx/post/xxx
📘 Facebook https://www.facebook.com/xxx/videos/xxx
🎬 Vimeo https://vimeo.com/xxxxx

❌ 非上述格式的链接(如直接视频地址、未知平台链接等)会被拦截,不会调用 API,避免浪费。


使用方式

示例命令

下载抖音视频:

python3 "$SKILL_PATH/assets/downloader.py" "https://www.douyin.com/jingxuan?modal_id=7597329042169220398"

其他平台类似:

python3 "$SKILL_PATH/assets/downloader.py" "https://youtu.be/xxxxxx"
python3 "$SKILL_PATH/assets/downloader.py" "https://www.instagram.com/p/xxxxxx"

首次使用

使用前需配置 REDFOX_API_KEY(前往 redfox.hk 注册获取,格式 ak_xxxxxxxx)。

配置方式(任选其一):

方式 命令
环境变量(推荐) export REDFOX_API_KEY=ak_你的密钥
命令行参数 python3 "$SKILL_PATH/assets/downloader.py" "<链接>" --api-key ak_你的密钥
配置文件 echo '{"api_key":"ak_你的密钥"}' > ~/.qoder/apis/redfox.json

特色功能

功能 说明
无水印下载 API 自动返回无水印直链,无需手动处理
图文下载 支持图文类型下载所有图片(暂不支持小红书图文)
跨平台支持 覆盖抖音、小红书、快手、视频号、B站、YouTube、Instagram 等十多主流平台
链接自适应 支持短链、分享链、网页链接等多种格式
进度显示 下载过程实时显示进度条和百分比
多端兼容 支持手机端分享链接和 PC 端网页链接

常见使用场景

场景 示例链接 说明
抖音视频去水印保存 https://v.douyin.com/xxxxxx/ 下载无水印视频到本地
小红书视频下载 http://xhslink.com/o/xxxxxx 下载无水印视频
快手视频收藏 https://v.kuaishou.com/xxxxxx 保存喜欢的视频作品
B站高画质下载 https://b23.tv/xxxxxx 下载最佳画质+音质视频
YouTube 视频下载 https://youtu.be/xxxxxx 下载 YouTube 视频
Instagram 视频/图文 https://www.instagram.com/p/xxxxxx 下载 Instagram 内容
内容二次创作 任意支持平台 下载素材用于剪辑创作
离线备份 任意支持平台 备份收藏的作品到本地

支持的作品链接格式

平台 链接格式 说明
抖音(Douyin) https://v.douyin.com/xxxxxx/ 手机分享链接 / PC 网页链接
小红书(Xiaohongshu) http://xhslink.com/o/xxxxxx 短链分享链接
快手(Kuaishou) https://v.kuaishou.com/xxxxxx 手机分享链接
视频号(WeChat Channels) 微信内分享链接 需复制微信内的链接
B站(Bilibili) https://b23.tv/xxxxxx 短链分享链接
YouTube https://youtu.be/xxxxxx 短链 / 网页链接
Instagram https://www.instagram.com/p/xxxxxx 帖子 / Reels 链接
X(Twitter) https://x.com/xxx/status/xxx 推文视频链接
TikTok https://www.tiktok.com/@xxx/video/xxx TikTok 视频链接
Facebook https://www.facebook.com/xxx/videos/xxx Facebook 视频链接
Threads https://www.threads.net/@xxx/post/xxx Threads 链接
Vimeo https://vimeo.com/xxxxxx Vimeo 视频链接

常见问题

Q:如何获取自己的 API Key? A:前往 redfox.hk 注册即可获取 Token。

Q:下载的视频有水印吗? A:没有。API 返回的是无水印直链。

Q:支持图文下载吗? A:支持图文类型下载(暂不支持小红书图文)。图文内容会自动下载所有图片,并按序号命名。

Q:可以批量上传多个链接吗? A:不支持。每次只能输入一个链接,批量上传会导致解析失败。

Q:链接提示解析失败怎么办? A:确认链接是否完整、是否已过期。短链有时效性,建议重新复制分享链接。


了解更多

本工具基于 redfox.hk 的 parseWork/parse 接口构建。前往官网查看更多 API 能力和使用文档。

Files (redfox-community)
  • assets
    • downloader.py 14 KB
      #!/usr/bin/env python3
      """
      Qoder Video Downloader - API 版本
      使用 redfox.hk API 解析并下载无水印视频/图文
      支持:抖音、小红书、快手、视频号、B站、YouTube、Instagram、X、TikTok、Threads、Facebook、Vimeo 等
      
      Usage:
          python3 downloader.py <url> [--api-key <key>] [--output-dir <path>]
      """
      
      import argparse
      import json
      import os
      import re
      import sys
      import warnings
      from pathlib import Path
      
      import requests
      
      # Suppress urllib3 OpenSSL warning on macOS
      warnings.filterwarnings("ignore", category=Warning)
      warnings.filterwarnings("ignore", message=".*NotOpenSSLWarning.*")
      
      API_URL = "https://redfox.hk/story/api/parseWork/parse"
      CONFIG_DIR = Path.home() / ".qoder" / "apis"
      CONFIG_FILE = CONFIG_DIR / "redfox.json"
      
      ENV_KEY = "REDFOX_API_KEY"
      
      PLATFORM_MAP = {
          "dy": "抖音",
          "xhs": "小红书",
          "xhsw": "小红书",
          "ks": "快手",
          "bili": "B站",
      }
      
      GREEN = "\033[92m"
      YELLOW = "\033[93m"
      RED = "\033[91m"
      CYAN = "\033[96m"
      BOLD = "\033[1m"
      RESET = "\033[0m"
      
      
      def info(msg):
          print(f"{GREEN}[✓]{RESET} {msg}")
      
      
      def warn(msg):
          print(f"{YELLOW}[!]{RESET} {msg}")
      
      
      def error(msg):
          print(f"{RED}[✗]{RESET} {msg}")
      
      
      def step(msg):
          print(f"{CYAN}[→]{RESET} {msg}")
      
      
      def get_api_key(cli_key=None):
          """Get API key with priority: CLI arg > env var > config file."""
          if cli_key:
              return cli_key
      
          env_key = os.environ.get(ENV_KEY)
          if env_key:
              return env_key
      
          if CONFIG_FILE.exists():
              try:
                  data = json.loads(CONFIG_FILE.read_text())
                  key = data.get("api_key")
                  if key:
                      return key
              except (json.JSONDecodeError, OSError):
                  pass
      
          return None
      
      
      def require_api_key(cli_key=None):
          """Resolve API key or exit with configuration guidance."""
          api_key = get_api_key(cli_key=cli_key)
          if api_key:
              return api_key
      
          print(f"{RED}╔══════════════════════════════════════════════════╗{RESET}")
          print(f"{RED}║  未配置 API Key,请通过以下方式之一配置:      ║{RESET}")
          print(f"{RED}║                                                ║{RESET}")
          print(f"{RED}║  export REDFOX_API_KEY=ak_你的密钥             ║{RESET}")
          print(f"{RED}║  python3 downloader.py <url> --api-key ak_xxx  ║{RESET}")
          print(RED + "║  echo '{\"api_key\":\"ak_你的密钥\"}' > ~/.qoder/apis/redfox.json ║" + RESET)
          print(f"{RED}║                                                ║{RESET}")
          print(f"{RED}║  注册获取 Key: https://redfox.hk/settings/api-keys ║{RESET}")
          print(f"{RED}╚══════════════════════════════════════════════════╝{RESET}")
          sys.exit(1)
      
      
      def save_api_key(api_key):
          """Persist API key to config file."""
          CONFIG_DIR.mkdir(parents=True, exist_ok=True)
          CONFIG_FILE.write_text(json.dumps({"api_key": api_key}, indent=2))
          os.chmod(CONFIG_FILE, 0o600)  # secure file permissions
          info(f"API Key saved to {CONFIG_FILE}")
      
      
      def sanitize_filename(name):
          """Remove or replace characters unsafe for filenames."""
          if not name:
              return None
          name = re.sub(r'[\\/*?:"<>|]', "", name)
          name = name.strip().replace(" ", "_")
          name = name[:120]  # limit length
          return name or None
      
      
      def download_file(session, url, filepath, desc="Downloading"):
          """Download a file with progress display."""
          try:
              resp = session.get(url, stream=True, timeout=120)
              resp.raise_for_status()
      
              total = int(resp.headers.get("content-length", 0))
              downloaded = 0
      
              with open(filepath, "wb") as f:
                  for chunk in resp.iter_content(chunk_size=8192):
                      if chunk:
                          f.write(chunk)
                          downloaded += len(chunk)
                          if total > 0:
                              pct = int(downloaded * 100 / total)
                              bar = "█" * (pct // 5) + "░" * (20 - pct // 5)
                              print(f"\r  {bar} {pct}%", end="", flush=True)
              print()
              return True
      
          except requests.exceptions.RequestException as e:
              error(f"Download failed: {e}")
              return False
      
      
      def is_valid_share_url(url):
          """Check if the URL is a valid sharing link from supported platforms.
          Returns (is_valid: bool, platform_name: str or None).
          """
          # Domain -> Platform mapping for known sharing link patterns
          platform_patterns = [
              # 抖音 Douyin
              (r'(https?://)?(www\.)?v\.douyin\.com/', '抖音'),
              (r'(https?://)?(www\.)?douyin\.com/(video|jingxuan|note)/', '抖音'),
              (r'(https?://)?(www\.)?douyin\.com\/user\/', '抖音'),
              # 小红书 Xiaohongshu
              (r'(https?://)?(www\.)?xhslink\.(com|cn)/', '小红书'),
              (r'(https?://)?(www\.)?xiaohongshu\.com/', '小红书'),
              (r'(https?://)?(www\.)?xhslink\.com/', '小红书'),
              # 快手 Kuaishou
              (r'(https?://)?(www\.)?v\.kuaishou\.com/', '快手'),
              (r'(https?://)?(www\.)?kuaishou\.com/', '快手'),
              # 视频号 WeChat Channels
              (r'(https?://)?weixin\.qq\.com/sph/', '视频号'),
              # B站 Bilibili
              (r'(https?://)?(www\.)?b23\.tv/', 'B站'),
              (r'(https?://)?(www\.)?bilibili\.com/video/', 'B站'),
              # YouTube
              (r'(https?://)?(www\.)?youtu\.be/', 'YouTube'),
              (r'(https?://)?(www\.)?youtube\.com/watch\?', 'YouTube'),
              (r'(https?://)?(www\.)?youtube\.com/shorts/', 'YouTube'),
              # Instagram
              (r'(https?://)?(www\.)?instagram\.com/p/', 'Instagram'),
              (r'(https?://)?(www\.)?instagram\.com/reel/', 'Instagram'),
              # X / Twitter
              (r'(https?://)?(www\.)?x\.com/\w+/status/', 'X (Twitter)'),
              (r'(https?://)?(www\.)?twitter\.com/\w+/status/', 'X (Twitter)'),
              # TikTok
              (r'(https?://)?(www\.)?tiktok\.com/@', 'TikTok'),
              # Threads
              (r'(https?://)?(www\.)?threads\.net/@', 'Threads'),
              # Facebook
              (r'(https?://)?(www\.)?facebook\.com/.*/videos/', 'Facebook'),
              (r'(https?://)?(www\.)?fb\.com/.*/videos/', 'Facebook'),
              # Vimeo
              (r'(https?://)?(www\.)?vimeo\.com/\d+', 'Vimeo'),
          ]
          for pattern, name in platform_patterns:
              if re.search(pattern, url, re.IGNORECASE):
                  return True, name
          return False, None
      
      
      def show_url_guide():
          """Show supported platform URL formats."""
          print(f"\n{YELLOW}╔══════════════════════════════════════════════════════════╗{RESET}")
          print(f"{YELLOW}║  链接格式不支持或无法识别,请检查是否传入了正确的分享链接  ║{RESET}")
          print(f"{YELLOW}╠══════════════════════════════════════════════════════════╣{RESET}")
          print(f"{YELLOW}║  支持的链接格式:                                       ║{RESET}")
          print(f"{YELLOW}║  🎵 抖音     v.douyin.com/xxx                           ║{RESET}")
          print(f"{YELLOW}║  📕 小红书   xhslink.com/xxx 或 xhslink.cn/xxx           ║{RESET}")
          print(f"{YELLOW}║  📱 快手     v.kuaishou.com/xxx                         ║{RESET}")
          print(f"{YELLOW}║  📺 视频号   weixin.qq.com/sph/xxx                      ║{RESET}")
          print(f"{YELLOW}║  📺 B站      b23.tv/xxx 或 bilibili.com/video/xxx        ║{RESET}")
          print(f"{YELLOW}║  ▶️ YouTube  youtu.be/xxx 或 youtube.com/watch?v=xxx     ║{RESET}")
          print(f"{YELLOW}║  📷 Instagram instagram.com/p/xxx                       ║{RESET}")
          print(f"{YELLOW}║  🐦 X/Twitter  x.com/xxx/status/xxx                     ║{RESET}")
          print(f"{YELLOW}║  🎵 TikTok   tiktok.com/@xxx/video/xxx                  ║{RESET}")
          print(f"{YELLOW}║  🧵 Threads  threads.net/@xxx/post/xxx                  ║{RESET}")
          print(f"{YELLOW}║  📘 Facebook  facebook.com/xxx/videos/xxx               ║{RESET}")
          print(f"{YELLOW}║  🎬 Vimeo    vimeo.com/xxxxxx                           ║{RESET}")
          print(f"{YELLOW}╚══════════════════════════════════════════════════════════╝{RESET}")
          print()
      
      
      def main():
          parser = argparse.ArgumentParser(
              description="短视频下载器 - 使用 redfox.hk API 下载无水印视频",
              formatter_class=argparse.RawDescriptionHelpFormatter,
              epilog="""
      Examples:
        python3 downloader.py https://v.douyin.com/xxxxxx/
        python3 downloader.py https://b23.tv/xxxxxx --api-key ak_xxxxx
        python3 downloader.py https://xhslink.com/o/xxxxxx -o ~/Videos
      
      也可通过环境变量 REDFOX_API_KEY 配置密钥:
        export REDFOX_API_KEY=ak_xxxxx
        python3 downloader.py <url>
              """,
          )
          parser.add_argument("url", help="视频/图文链接")
          parser.add_argument("--api-key", help="API Key(格式 ak_xxx,不传则读取环境变量或配置文件)")
          parser.add_argument("-o", "--output-dir", help="输出目录(默认 ~/Downloads/QoderVideos)")
          parser.add_argument(
              "--save-key",
              action="store_true",
              help="将本次传入的 API Key 保存到配置文件",
          )
      
          args = parser.parse_args()
      
          # ── Banner ──
          banner = f"""{CYAN}{BOLD}
        ╔══════════════════════════════════════╗
        ║     Qoder Video Downloader (API)     ║
        ║     视频下载去水印工具          ║
        ╚══════════════════════════════════════╝{RESET}
      """
          print(banner)
      
          # ── API Key ──
          api_key = require_api_key(cli_key=args.api_key)
      
          # Save key if requested
          if args.save_key:
              if not args.api_key:
                  warn("--save-key 需要同时传入 --api-key")
                  sys.exit(1)
              save_api_key(api_key)
      
          # ── URL ──
          url = args.url.strip().strip('"').strip("'")
          if not url.startswith(("http://", "https://")):
              url = "https://" + url
      
          step(f"URL: {url}")
      
          # ── URL validation ──
          is_valid, platform = is_valid_share_url(url)
          if not is_valid:
              error("链接格式不支持,无法进行去水印下载")
              show_url_guide()
              sys.exit(1)
      
          info(f"检测到平台: {platform}")
      
          # ── Call API ──
          step("Calling redfox.hk API...")
      
          session = requests.Session()
          session.headers.update({
              "Content-Type": "application/json",
              "X-API-KEY": api_key,
          })
      
          try:
              resp = session.post(API_URL, json={"url": url, "source": "短视频下载器-SkillHub"}, timeout=30)
              result = resp.json()
          except requests.exceptions.RequestException as e:
              error(f"API request failed: {e}")
              sys.exit(1)
          except json.JSONDecodeError:
              error(f"API returned invalid JSON: {resp.text[:200]}")
              sys.exit(1)
      
          code = result.get("code")
          msg = result.get("msg", "")
      
          # 成功 code 以 2 开头(如 200、2000),其余为错误
          if not str(code).startswith("2"):
              if code == 3106:
                  error("缺少 API Key")
              elif code == 3107:
                  error("API Key 无效或已失效,请检查是否正确")
                  print("  配置方式:export REDFOX_API_KEY=ak_你的密钥")
                  print("  获取 Key:https://redfox.hk/settings/api-keys?source=github")
              elif code == 400:
                  error(f"请求参数错误: {msg}")
              else:
                  error(f"API error (code {code}): {msg}")
              sys.exit(1)
      
          data = result.get("data")
          if not data:
              error("API returned empty data")
              sys.exit(1)
      
          aweme_type = data.get("awemeType")
          platform = data.get("platform", "unknown")
          title = data.get("title", "untitled")
      
          print()
          info(f"Platform: {PLATFORM_MAP.get(platform, platform)}")
          info(f"Title: {title[:80]}")
      
          # ── Output directory ──
          output_dir = args.output_dir or str(Path.home() / "Downloads" / "QoderVideos")
          os.makedirs(output_dir, exist_ok=True)
      
          # ── Download ──
          downloaded_files = []
      
          if aweme_type == "video":
              video_url = data.get("videoUrl")
              if not video_url:
                  error("API did not return video URL")
                  sys.exit(1)
      
              safe_title = sanitize_filename(title) or f"video_{platform}"
              filename = f"{safe_title}.mp4"
              filepath = os.path.join(output_dir, filename)
      
              info(f"Type: Video")
              step("Downloading video...")
      
              if download_file(session, video_url, filepath):
                  downloaded_files.append(filepath)
      
          elif aweme_type == "photo":
              image_urls = data.get("imageUrls") or []
              if not image_urls:
                  error("API did not return image URLs")
                  sys.exit(1)
      
              safe_title = sanitize_filename(title) or f"photo_{platform}"
              total = len(image_urls)
              info(f"Type: Photo (共 {total} 张)")
      
              for i, img_url in enumerate(image_urls, 1):
                  ext = os.path.splitext(img_url.split("?")[0])[1] or ".jpg"
                  filename = f"{safe_title}_{i}{ext}"
                  filepath = os.path.join(output_dir, filename)
      
                  step(f"Downloading image {i}/{total}...")
                  if download_file(session, img_url, filepath):
                      downloaded_files.append(filepath)
      
          else:
              error(f"Unknown awemeType: {aweme_type}")
              sys.exit(1)
      
          # ── Result ──
          if downloaded_files:
              print(f"\n{GREEN}{BOLD}✓ Download complete!{RESET}")
              for f in downloaded_files:
                  size_mb = os.path.getsize(f) / (1024 * 1024)
                  print(f"  {f} ({size_mb:.1f} MB)")
              sys.exit(0)
          else:
              print(f"\n{RED}{BOLD}✗ Download failed{RESET}")
              sys.exit(1)
      
      
      if __name__ == "__main__":
          main()
      
  • presentation.html 47.3 KB · in bundle
  • README.en.md 4.8 KB
    # Video Downloader / video-downloader
    
    ---
    
    ## Introduction
    
    Paste a short video link and get watermark-free download URLs instantly — Douyin, Xiaohongshu, Kuaishou, Bilibili, YouTube, Instagram, and 12+ platforms all recognized. Videos and image posts can all be downloaded. Copy the link into your browser to save. No plugins, no subscriptions — one link does it all, and you won't end up with a watermarked version.
    
    **Core Value**
    
    - **Paste and go**: paste a share link and get watermark-free download URLs right away — one link does it all, no need to hunt for different tools.
    - **Clean, watermark-free**: every returned video is watermark-free, ready for collecting, editing, or remixing.
    - **12+ platforms covered**: Douyin, Xiaohongshu, Kuaishou, WeChat Channels, Bilibili, YouTube, Instagram, X, TikTok, Threads, Facebook, Vimeo — mobile share links and desktop web links all recognized.
    - **Image posts too**: beyond videos, all images in a post can be downloaded and saved together with sequential naming.
    - **Paste and download with progress**: after configuring your API Key, paste a link and download. Progress bar shown in real time, even for large files.
    
    **Who Is It For**
    
    - 🎬 **Creators / Editors** — quickly save video clips from any platform for secondary creation
    - 📚 **Content Collectors** — back up favorite videos and image posts locally, safe from deleted content
    - 🔍 **Operators / Researchers** — download competitor or trending content for analysis
    
    ---
    
    ## Features
    
    ### Core Features
    
    - **Video Parsing**: paste a video link from any supported platform to parse out watermark-free download URLs.
    - **Image Download**: supports image-type posts, automatically downloads all images with sequential naming.
    - **Cross-Platform Support**: covers Douyin, Xiaohongshu, Kuaishou, WeChat Channels, Bilibili, YouTube, Instagram, X, TikTok, Threads, Facebook, Vimeo, and more.
    - **Link Auto-Detection**: mobile share links, desktop web links, and various formats are all auto-recognized.
    - **Progress Display**: download progress bar and percentage shown in real time, even for large files.
    
    ### Supported Platforms
    
    | Platform | Link Format Example |
    |----------|-------------------|
    | 🎵 Douyin | `https://v.douyin.com/xxxx` |
    | 📕 Xiaohongshu | `http://xhslink.com/xxx` |
    | 📱 Kuaishou | `https://v.kuaishou.com/xxxx` |
    | 📺 WeChat Channels | `https://weixin.qq.com/sph/xxxx` |
    | 📺 Bilibili | `https://b23.tv/xxxx` |
    | ▶️ YouTube | `https://youtu.be/xxx` |
    | 📷 Instagram | `https://www.instagram.com/p/xxx` |
    | 🐦 X (Twitter) | `https://x.com/xxx/status/xxx` |
    | 🎵 TikTok | `https://www.tiktok.com/@xxx/video/xxx` |
    | 🧵 Threads | `https://www.threads.net/@xxx/post/xxx` |
    | 📘 Facebook | `https://www.facebook.com/xxx/videos/xxx` |
    | 🎬 Vimeo | `https://vimeo.com/xxxxx` |
    
    ---
    
    ## API Key & Security
    
    - This skill requires the environment variable: `REDFOX_API_KEY`.
    - `REDFOX_API_KEY` is provided by [RedFoxHub](https://redfox.hk/settings/api-keys?source=github) (`https://redfox.hk`).
    - Please register at [RedFoxHub](https://redfox.hk?source=github) to obtain your `REDFOX_API_KEY`.
    - Configure the `REDFOX_API_KEY` environment variable on your device before using this skill.
    - Before providing your key, confirm its source, scope, validity period, and whether it can be reset/revoked.
    - Never hardcode or expose the key in code, prompts, logs, or output files.
    
    ---
    
    ## Usage Guide
    
    Just describe what you want in natural language — no commands to memorize.
    
    ### Quick Reference
    
    | Intent | Example | Result |
    | ------ | ------- | ------ |
    | Download a Douyin video | "Download this video https://v.douyin.com/xxxxxx/" | Parses the link and downloads the watermark-free video |
    | Save a Xiaohongshu post | "Help me save this post http://xhslink.com/xxx" | Parses and downloads video or images |
    | Download a YouTube video | "Download this YouTube video https://youtu.be/xxx" | Parses and downloads the video file |
    | Save an Instagram post | "Save this IG post https://www.instagram.com/p/xxx" | Parses and downloads video or images |
    
    ### Output Example
    
    After parsing, you will receive a result like:
    
    > ✅ Download complete!
    >
    > 📱 Platform: Douyin
    > 📝 Title: Video title
    > 🎬 Type: Video
    >
    > File saved to ~/Downloads/QoderVideos/video_title.mp4 (12.3 MB)
    
    ---
    
    ## Use Cases
    
    | Scenario | Role | Example | Benefit |
    | -------- | ---- | ------- | ------- |
    | Material collection | Editor | "Download this Douyin video" | Get watermark-free footage, straight into your editing workflow |
    | Content backup | Collector | "Save this Xiaohongshu post" | Keep it locally forever, even if the original is deleted |
    | Trend analysis | Operator | "Download this viral video" | Watch offline repeatedly and break down what makes it viral |
    | Cross-platform archiving | Researcher | "Download videos from these platforms" | 12+ platforms supported, one tool does it all |
    
  • README.md 4.6 KB
    # 短视频下载器 / video-downloader
    
    ---
    
    ## 简介
    
    贴上短视频链接就能拿到无水印下载直链,抖音、小红书、快手、B站、YouTube、Instagram 等十多个平台都认,视频和图文都能下载,复制到浏览器就能保存。不用装插件、不用开会员,贴一个链接搞定一个视频,不会让你折腾半天还下载到带水印的版本。
    
    **核心价值**
    
    - **贴链即得不费劲**:贴上分享链接就能拿到无水印下载直链,一个链接搞定,不用到处找工具。
    - **视频干净无水印**:返回的都是无水印视频,收藏、剪辑、二次创作都能直接拿去用。
    - **十多个平台全覆盖**:抖音、小红书、快手、视频号、B站、YouTube、Instagram、X、TikTok、Threads、Facebook、Vimeo,手机分享链接和电脑网页链接都能识别。
    - **图文也能下载**:除了视频,图文帖子里的所有图片也能一并下载保存,按序号自动命名。
    - **贴链即下进度可见**:配置 API Key 后贴上链接即可下载,进度条实时显示,大文件也不怕。
    
    **适用对象**
    
    - 🎬 **创作者 / 剪辑师** — 快速保存各平台上的视频素材,用于二次创作
    - 📚 **内容收藏者** — 把喜欢的视频、图文备份到本地,不怕原帖被删
    - 🔍 **运营 / 研究者** — 下载竞品或热点内容,慢慢分析
    
    ---
    
    ## 功能特性
    
    ### 核心功能
    
    - **视频解析**:粘贴任意支持平台的视频链接,一键解析出无水印视频下载链接。
    - **图文下载**:支持图文类型内容,自动下载所有图片并按序号命名。
    - **跨平台支持**:覆盖抖音、小红书、快手、视频号、B站、YouTube、Instagram、X、TikTok、Threads、Facebook、Vimeo 等十多个主流平台。
    - **链接自适应**:手机分享短链、电脑网页链接等多种格式都能自动识别。
    - **进度显示**:下载过程有进度条和百分比,大文件也不怕。
    
    ### 支持平台
    
    | 平台 | 链接格式示例 |
    |------|-------------|
    | 🎵 抖音 | `https://v.douyin.com/xxxx` |
    | 📕 小红书 | `http://xhslink.com/xxx` |
    | 📱 快手 | `https://v.kuaishou.com/xxxx` |
    | 📺 视频号 | `https://weixin.qq.com/sph/xxxx` |
    | 📺 B站 | `https://b23.tv/xxxx` |
    | ▶️ YouTube | `https://youtu.be/xxx` |
    | 📷 Instagram | `https://www.instagram.com/p/xxx` |
    | 🐦 X (Twitter) | `https://x.com/xxx/status/xxx` |
    | 🎵 TikTok | `https://www.tiktok.com/@xxx/video/xxx` |
    | 🧵 Threads | `https://www.threads.net/@xxx/post/xxx` |
    | 📘 Facebook | `https://www.facebook.com/xxx/videos/xxx` |
    | 🎬 Vimeo | `https://vimeo.com/xxxxx` |
    
    ---
    
    ## 密钥获取与安全说明
    
    - 本技能需要使用环境变量:`REDFOX_API_KEY`。
    - `REDFOX_API_KEY` 由 [红狐 hub](https://redfox.hk/settings/api-keys?source=github) (`https://redfox.hk`) 提供。
    - 请前往 [红狐 hub](https://redfox.hk?source=github) 注册账号,获取 `REDFOX_API_KEY`。
    - 配置设备环境变量 `REDFOX_API_KEY` 后使用本技能。
    - 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
    - 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。
    
    ---
    
    ## 使用指南
    
    直接用自然语言描述需求,无需记忆命令。
    
    ### 常用说法速查
    
    | 意图 | 示例话术 | 效果 |
    | ---- | -------- | ---- |
    | 下载抖音视频 | 「下载这个视频 https://v.douyin.com/xxxxxx/」 | 解析链接并下载无水印视频 |
    | 保存小红书内容 | 「帮我把这条小红书存下来 http://xhslink.com/xxx」 | 解析后下载视频或图文 |
    | 下载 YouTube 视频 | 「下载这条 YouTube 视频 https://youtu.be/xxx」 | 解析并下载视频文件 |
    | 保存 Instagram 帖子 | 「把这个 IG 帖子存下来 https://www.instagram.com/p/xxx」 | 解析并下载视频或图文 |
    
    ### 输出示例
    
    解析完成后,你将收到如下格式的结果:
    
    > ✅ 下载完成!
    >
    > 📱 平台:抖音
    > 📝 标题:视频标题
    > 🎬 类型:Video
    >
    > 文件已保存到 ~/Downloads/QoderVideos/视频标题.mp4 (12.3 MB)
    
    ---
    
    ## 使用场景
    
    | 场景 | 角色 | 示例问法 | 收益 |
    | ---- | ---- | -------- | ---- |
    | 素材收集 | 剪辑师 | 「下载这条抖音视频」 | 快速拿到无水印素材,直接进剪辑流程 |
    | 内容备份 | 收藏者 | 「保存这个小红书帖子」 | 原帖删除也不怕,本地永久留存 |
    | 热点分析 | 运营 | 「把这个爆款视频下下来」 | 离线反复观看,拆解爆款逻辑 |
    | 跨平台存档 | 研究者 | 「下载这几个平台的视频」 | 十多个平台都能下载,一个工具搞定 |
    
  • SKILL.md 5.8 KB
    ---
    name: video-downloader
    description: 短视频下载器 — 支持抖音、小红书、快手、视频号、B站、YouTube、Instagram 等主流平台无水印视频下载。
    ---
    
    # 短视频下载器
    
    通过 [redfox.hk](https://redfox.hk/settings/api-keys?source=github) API 解析并下载主流短视频平台的无水印视频/图文。
    
    ---
    
    ## 能力概述
    
    - **平台支持**:抖音、小红书、快手、视频号、B站、YouTube、Instagram、X(Twitter)、TikTok、Threads、Facebook、Vimeo 等主流平台
    - **内容类型**:视频(mp4)、图文(jpg/png,暂不支持小红书图文)
    - **输入方式**:粘贴**页面分享链接**即可(每次仅限一个链接,不支持批量上传)
    - **去水印**:API 自动返回无水印直链
    
    ---
    
    ## 链接使用规范
    
    ### 支持的链接格式
    
    本工具仅接受以下平台的**页面分享链接**,传入前会自动校验链接是否匹配支持的格式:
    
    | 平台 | 链接格式示例 |
    |------|-------------|
    | 🎵 抖音 | `https://v.douyin.com/xxxx` / `douyin.com/video/xxx` |
    | 📕 小红书 | `http://xhslink.com/xxx` / `xhslink.cn/xxx` |
    | 📱 快手 | `https://v.kuaishou.com/xxxx` |
    | 📺 视频号 | `https://weixin.qq.com/sph/xxxx` |
    | 📺 B站 | `https://b23.tv/xxxx` / `bilibili.com/video/xxx` |
    | ▶️ YouTube | `https://youtu.be/xxx` / `youtube.com/watch?v=xxx` |
    | 📷 Instagram | `https://www.instagram.com/p/xxx` |
    | 🐦 X (Twitter) | `https://x.com/xxx/status/xxx` |
    | 🎵 TikTok | `https://www.tiktok.com/@xxx/video/xxx` |
    | 🧵 Threads | `https://www.threads.net/@xxx/post/xxx` |
    | 📘 Facebook | `https://www.facebook.com/xxx/videos/xxx` |
    | 🎬 Vimeo | `https://vimeo.com/xxxxx` |
    
    > ❌ 非上述格式的链接(如直接视频地址、未知平台链接等)会被拦截,不会调用 API,避免浪费。
    
    ---
    
    ## 使用方式
    
    ### 示例命令
    
    下载抖音视频:
    
    ```bash
    python3 "$SKILL_PATH/assets/downloader.py" "https://www.douyin.com/jingxuan?modal_id=7597329042169220398"
    ```
    
    其他平台类似:
    
    ```bash
    python3 "$SKILL_PATH/assets/downloader.py" "https://youtu.be/xxxxxx"
    python3 "$SKILL_PATH/assets/downloader.py" "https://www.instagram.com/p/xxxxxx"
    ```
    
    ### 首次使用
    
    使用前需配置 `REDFOX_API_KEY`(前往 [redfox.hk](https://redfox.hk/settings/api-keys?source=github) 注册获取,格式 `ak_xxxxxxxx`)。
    
    配置方式(任选其一):
    
    | 方式 | 命令 |
    |------|------|
    | **环境变量**(推荐) | `export REDFOX_API_KEY=ak_你的密钥` |
    | **命令行参数** | `python3 "$SKILL_PATH/assets/downloader.py" "<链接>" --api-key ak_你的密钥` |
    | **配置文件** | `echo '{"api_key":"ak_你的密钥"}' > ~/.qoder/apis/redfox.json` |
    
    ---
    
    ## 特色功能
    
    | 功能 | 说明 |
    |------|------|
    | **无水印下载** | API 自动返回无水印直链,无需手动处理 |
    | **图文下载** | 支持图文类型下载所有图片(暂不支持小红书图文) |
    | **跨平台支持** | 覆盖抖音、小红书、快手、视频号、B站、YouTube、Instagram 等十多主流平台 |
    | **链接自适应** | 支持短链、分享链、网页链接等多种格式 |
    | **进度显示** | 下载过程实时显示进度条和百分比 |
    | **多端兼容** | 支持手机端分享链接和 PC 端网页链接 |
    
    ---
    
    ## 常见使用场景
    
    | 场景 | 示例链接 | 说明 |
    |------|----------|------|
    | 抖音视频去水印保存 | `https://v.douyin.com/xxxxxx/` | 下载无水印视频到本地 |
    | 小红书视频下载 | `http://xhslink.com/o/xxxxxx` | 下载无水印视频 |
    | 快手视频收藏 | `https://v.kuaishou.com/xxxxxx` | 保存喜欢的视频作品 |
    | B站高画质下载 | `https://b23.tv/xxxxxx` | 下载最佳画质+音质视频 |
    | YouTube 视频下载 | `https://youtu.be/xxxxxx` | 下载 YouTube 视频 |
    | Instagram 视频/图文 | `https://www.instagram.com/p/xxxxxx` | 下载 Instagram 内容 |
    | 内容二次创作 | 任意支持平台 | 下载素材用于剪辑创作 |
    | 离线备份 | 任意支持平台 | 备份收藏的作品到本地 |
    
    ### 支持的作品链接格式
    
    | 平台 | 链接格式 | 说明 |
    |------|----------|------|
    | 抖音(Douyin) | `https://v.douyin.com/xxxxxx/` | 手机分享链接 / PC 网页链接 |
    | 小红书(Xiaohongshu) | `http://xhslink.com/o/xxxxxx` | 短链分享链接 |
    | 快手(Kuaishou) | `https://v.kuaishou.com/xxxxxx` | 手机分享链接 |
    | 视频号(WeChat Channels) | 微信内分享链接 | 需复制微信内的链接 |
    | B站(Bilibili) | `https://b23.tv/xxxxxx` | 短链分享链接 |
    | YouTube | `https://youtu.be/xxxxxx` | 短链 / 网页链接 |
    | Instagram | `https://www.instagram.com/p/xxxxxx` | 帖子 / Reels 链接 |
    | X(Twitter) | `https://x.com/xxx/status/xxx` | 推文视频链接 |
    | TikTok | `https://www.tiktok.com/@xxx/video/xxx` | TikTok 视频链接 |
    | Facebook | `https://www.facebook.com/xxx/videos/xxx` | Facebook 视频链接 |
    | Threads | `https://www.threads.net/@xxx/post/xxx` | Threads 链接 |
    | Vimeo | `https://vimeo.com/xxxxxx` | Vimeo 视频链接 |
    
    ---
    
    ## 常见问题
    
    **Q:如何获取自己的 API Key?**
    A:前往 [redfox.hk](https://redfox.hk/settings/api-keys?source=github) 注册即可获取 Token。
    
    **Q:下载的视频有水印吗?**
    A:没有。API 返回的是无水印直链。
    
    **Q:支持图文下载吗?**
    A:支持图文类型下载(暂不支持小红书图文)。图文内容会自动下载所有图片,并按序号命名。
    
    **Q:可以批量上传多个链接吗?**
    A:不支持。每次只能输入一个链接,批量上传会导致解析失败。
    
    **Q:链接提示解析失败怎么办?**
    A:确认链接是否完整、是否已过期。短链有时效性,建议重新复制分享链接。
    
    ---
    
    ## 了解更多
    
    本工具基于 [redfox.hk](https://redfox.hk/settings/api-keys?source=github) 的 `parseWork/parse` 接口构建。前往官网查看更多 API 能力和使用文档。
    
  • 短视频下载器_Skill_审核演示.pdf 703.7 KB · in bundle

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related