agentleFS
OpenMinisOpenMinis/MinisSkills/douyin-downloader/SKILL.md

douyin-downloader

Skill584 starsChanged 59 days agoMITView on GitHub

Download Douyin (TikTok) videos from share links. Parse Douyin share text and links, download watermark-free videos, and transcribe audio to text using Volcano Engine ASR (Doubao Speech). Uses Python for iSH compatibility.

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    When the user provides Douyin share text or a link, extract the video metadata:

    line 26
  2. Very specific:

    Use the download_url from step 1:

    line 56
  3. Distinctive:

    Create a speech recognition (ASR) application

    line 121
  4. Very specific:

    Filename length: Use short filenames (English or pinyin) for saved files.

    line 146
  5. Very specific:

    When errors occur, scripts return JSON with { "status": "error", "error": "<message>" } on stderr and exit with code 1.

    line 161

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Douyin Video Downloader

Parse Douyin share links and download videos without watermarks.

Note: The original version used Node.js. Because of iSH environment limitations, it has been converted to Python.

Dependencies

  • Python 3
  • requests library (pip3 install requests)

Environment Variables (Transcription Feature)

  • VOLC_APP_KEY - Volcano Engine App Key
  • VOLC_ACCESS_KEY - Volcano Engine Access Key

Workflow

1. Parse Share Link

When the user provides Douyin share text or a link, extract the video metadata:

python3 scripts/parse_douyin.py "<share text or link>"

Input examples:

  • Full share text: 7.43 FuL:/ You know what? It really is pretty nice. https://v.douyin.com/iFDbjn2M/ Copy this link...
  • Just the URL: https://v.douyin.com/iFDbjn2M/

Output (JSON):

{
  "video_id": "7445842287652441376",
  "title": "You_know_what_It_really_is_pretty_nice",
  "download_url": "https://...play.../video/...",
  "raw_url": "https://...playwm.../video/...",
  "share_url": "https://v.douyin.com/iFDbjn2M/",
  "redirected_url": "https://www.iesdouyin.com/share/video/7445842287652441376",
  "iesdouyin_url": "https://www.iesdouyin.com/share/video/7445842287652441376"
}

Key fields:

  • download_url - Watermark-free version (playwm to play)
  • title - Sanitized video description, safe for filenames
  • video_id - Unique video identifier

2. Download Video

Use the download_url from step 1:

python3 scripts/download_video.py "<download_url>" "<output_path>"

Example:

python3 scripts/download_video.py "https://aweme.snssdk.com/aweme/v1/play/?video_id=..." "./downloads/You_know_what_It_really_is_pretty_nice.mp4"

Output:

{
  "status": "success",
  "path": "./downloads/You_know_what_It_really_is_pretty_nice.mp4"
}

Progress is written to stderr during download.

3. Transcribe Audio

Transcribe audio or video to text using Volcano Engine ASR (Doubao Speech):

python3 scripts/transcribe_audio.py "<audio_or_video_file>" --app-key "$VOLC_APP_KEY" --access-key "$VOLC_ACCESS_KEY"

Parameters:

  • --app-key - Volcano Engine App Key (required, or set the VOLC_APP_KEY environment variable)
  • --access-key - Volcano Engine Access Key (required, or set the VOLC_ACCESS_KEY environment variable)
  • --resource-id - Resource ID: volc.bigasr.auc_turbo (flash) or volc.seedasr.auc (standard)
  • --mode - Mode: auto | flash | standard (default: auto)
  • --out - Output JSON file path (optional)
  • --text-out - Output text file path (optional)

Example:

# Using env vars
export VOLC_APP_KEY="your_app_key"
export VOLC_ACCESS_KEY="your_access_key"
python3 scripts/transcribe_audio.py "./downloads/video.mp4" --mode flash

# Or inline
python3 scripts/transcribe_audio.py "./downloads/video.mp4" \
  --app-key "your_app_key" \
  --access-key "your_access_key" \
  --resource-id "volc.bigasr.auc_turbo" \
  --mode flash \
  --text-out "./downloads/transcript.txt"

Output (JSON):

{
  "status": "success",
  "mode": "flash",
  "result_text": "When you feel that fate has been unfair to you, you might want to listen to what Tong Guowei said to Long Keduo...",
  "result": { ... }
}

Getting API credentials:

  1. Visit the Volcano Engine Console
  2. Create a speech recognition (ASR) application
  3. Get the App Key and Access Key from the application settings

Complete Example

# Step 1: Parse
result=$(python3 scripts/parse_douyin.py "7.43 FuL:/ You know what? It really is pretty nice. https://v.douyin.com/iFDbjn2M/")

# Step 2: Extract fields
download_url=$(echo "$result" | python3 -c "import sys,json; print(json.load(sys.stdin)['download_url'])")
title=$(echo "$result" | python3 -c "import sys,json; print(json.load(sys.stdin)['title'])")

# Step 3: Download
python3 scripts/download_video.py "$download_url" "./downloads/${title}.mp4"

Notes

  • Watermark removal: The script automatically converts playwm URLs to play URLs
  • Title sanitization: Removes invalid filename characters (\/:*?"<>|)
  • Both video and note: Supports both /video/ and /note/ URLs
  • Mobile UA required: Uses an iPhone user agent for compatibility
  • Timeout: 60 seconds per download
  • Progress: Displays progress every 10% on stderr
  • Filename length: Use short filenames (English or pinyin) for saved files. Long filenames with URL encoding may break minis:// preview links.

Examples

  • Bad: High_Definition_Lens_41_years_old_Qi_Xi_How_is_her_condition_The_Role_of_Film_Beijing_Premiere.mp4
  • Good: qixi_short.mp4

Error Handling

Common errors:

  • No valid share link found - Invalid or missing URL in input
  • Failed to access the share link - Network error or blocked request
  • Failed to parse video information from HTML - Page structure changed (script needs an update)
  • Download timed out - Network timeout (try again)

When errors occur, scripts return JSON with { "status": "error", "error": "<message>" } on stderr and exit with code 1.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.