Manage quark-auto-save(QAS, 夸克自动转存, 夸克转存, 夸克订阅) tasks via CLI.

Automation

Manage quark-auto-save(QAS, 夸克自动转存, 夸克转存, 夸克订阅) tasks via CLI.

Install

openclaw skills install quark-auto-save

quark-auto-save

Manage quark-auto-save(QAS, 夸克自动转存, 夸克转存, 夸克订阅) tasks via CLI.

When user send message like https://pan.quark.cn/s/***, get detail, add a QAS task.

WIKI:

⚠️ Prerequisites

Env:

Actual configuration values are recorded in TOOLS.md, Do not modify SKILL.md

First Configuration: Analyze User Habits

After the user sets the token, the following analysis must be performed and recorded in TOOLS.md:

  1. Get Current Configuration:

    python3 {baseDir}/scripts/qas_client.py get-config
    
  2. Analyze Saving Habits:

    • Extract savepath directory patterns from existing tasks (e.g., /video/tv/, /video/anime/, /video/movie/)
    • Observe file naming format from pattern and replace fields — e.g., {TASKNAME}.S01E01.mp4 vs 01.mp4
    • Note which magic_regex key the user prefers (e.g. $TV_MAGIC)
  3. Record to TOOLS.md:

    ### quark-auto-save habits
    - TV Series Directory: /video/tv/{name}
    - Anime Directory: /video/anime/{name}
    - Movie Directory: /video/movie/{name}
    - Naming Pattern: $TV_MAGIC (e.g., 都是她的错.S01E01.mp4)
    ...
    

Python Client

Use {baseDir}/scripts/qas_client.py for all operations:

python3 {baseDir}/scripts/qas_client.py get-config                                    # Get all config & tasks
python3 {baseDir}/scripts/qas_client.py search "query" [-d]                           # Search resources
python3 {baseDir}/scripts/qas_client.py get-share "<shareurl>" [-a]                   # Get share detail (-a for all files)
python3 {baseDir}/scripts/qas_client.py check-path "/path"                            # Check savepath
python3 {baseDir}/scripts/qas_client.py delete-file "/path/to/file"                   # Delete cloud file
python3 {baseDir}/scripts/qas_client.py rename-file "/path/to/file" "new_name"        # Rename cloud file
python3 {baseDir}/scripts/qas_client.py add-task '{"taskname": "Name", ...}'          # Add task
python3 {baseDir}/scripts/qas_client.py run-task [taskname|json]                      # Run task(s)
python3 {baseDir}/scripts/qas_client.py update-task "TaskName" '{"savepath": "/new"}' # Update task
python3 {baseDir}/scripts/qas_client.py delete-task "TaskName"                        # Delete task
python3 {baseDir}/scripts/qas_client.py update-config '{"key": "value"}'              # Update config

Task Schema

{
  "taskname": "MediaName",
  "shareurl": "https://pan.quark.cn/s/xxx#/list/share/fid",
  "savepath": "/video/tv/MediaName",
  "pattern": "$TV_MAGIC",
  "replace": "",
  "update_subdir": "",
  "ignore_extension": false,
  "runweek": [1,2,3,4,5,6,7]
}

Required Fields: taskname, shareurl, savepath

Optional Fields: pattern, replace, update_subdir, ignore_extension, runweek, addition

add-task auto-detects zip/rar/7z files and enables auto_unarchive plugin automatically. No manual addition config needed for this.

Configuration Rules

shareurl Format

  • https://pan.quark.cn/s/{abc123}
  • https://pan.quark.cn/s/{abc123}#/list/share/{fid}

Subdirectory Priority

  1. Video files (mp4, mkv, avi)
  2. Resolution: 4K > 1080P > 720P

Archive files (zip, rar, 7z) are also supported — auto-unarchive is enabled automatically by add-task run-task.

Get subdir info:

python3 {baseDir}/scripts/qas_client.py get-share "<shareurl>"

Add task example:

python3 {baseDir}/scripts/qas_client.py add-task '{"taskname": "Black Mirror", "shareurl": "https://pan.quark.cn/s/xxx", "savepath": "/video/tv/Black Mirror", "pattern": "$TV_MAGIC"}'

pattern & replace

PatternReplaceResult
.*Save all files
\.(mp4|mkv)$Save video files only
^(\d+)\.mp4S02E\1.mp401.mp4 → S02E01.mp4
$TV_MAGICUse custom magic regex

replace Magic Variables

VariableDescription
{TASKNAME}Task name
{II}Index number (01, 02...)
{EXT}File extension
{SXX}Season (S01, S02...)
{E}Episode number
{DATE}Date (YYYYMMDD)

Workflows

Add New Task

  1. Search: python3 {baseDir}/scripts/qas_client.py search "MediaName" -d
  2. Verify & Get Details: python3 {baseDir}/scripts/qas_client.py get-share "<shareurl>"
    • Check if shareurl is valid (not banned)
    • Check file list for video files and select the subdir
  3. Analyze pattern & replace: Compare the share's filenames with the user's preferred format (from TOOLS.md).
    • If filenames already match the preferred format → use ".*" (save as-is)
    • If filenames need renaming → write regex pattern to capture episode/season info, and replace with magic variables to produce the preferred format
    • Example: source 01.mp4, preferred {TASKNAME}.S01E01.mp4"pattern": "^(\\d+)\\.mp4$", "replace": "{TASKNAME}.S01E\\1.{EXT}"
  4. Execute:
    • One-time (completed series, taskname contains X集全, 全X集, 完结, 全集, single movie) → run-task
    • Subscription (ongoing series that gets new episodes) → add-task
    # One-time (completed)
    python3 {baseDir}/scripts/qas_client.py run-task '{"taskname": "MediaName", "shareurl": "...", "savepath": "...", "pattern": "..."}'
    # Subscription (ongoing)
    python3 {baseDir}/scripts/qas_client.py add-task '{"taskname": "MediaName", "shareurl": "...", "savepath": "...", "pattern": "..."}'
    
    • savepath and pattern must follow the user's existing habits recorded in TOOLS.md

Check Invalid Tasks

  1. Get tasks: python3 {baseDir}/scripts/qas_client.py get-config
  2. Identify invalid tasks: tasks with shareurl_ban key in tasklist
  3. Find replacement: python3 {baseDir}/scripts/qas_client.py search "<taskname>" -d to get a new shareurl
  4. Verify: python3 {baseDir}/scripts/qas_client.py detail "<new_shareurl>" — check not banned, file list matches
  5. Update task: python3 {baseDir}/scripts/qas_client.py update-task "TaskName" '{"shareurl": "<verified_url>", "shareurl_ban": ""}'

Delete Task

python3 {baseDir}/scripts/qas_client.py delete-task "TaskName"

Update Task

# Partial update (only specified fields are changed)
python3 {baseDir}/scripts/qas_client.py update-task "TaskName" '{"savepath": "/new/path"}'
python3 {baseDir}/scripts/qas_client.py update-task "TaskName" '{"pattern": "$TV_MAGIC", "runweek": [1,3,5]}'

Update Config

# Update global config (allowed keys: cookie, crontab, push_config, tasklist, magic_regex, plugins, source)
python3 {baseDir}/scripts/qas_client.py update-config '{"crontab": "0 9 * * *"}'

Run Tasks

python3 {baseDir}/scripts/qas_client.py run-task             # All tasks
python3 {baseDir}/scripts/qas_client.py run-task "TaskName"  # Specific task
python3 {baseDir}/scripts/qas_client.py run-task '{"taskname": "Test", ...}'  # Direct task

Output Format

All commands output text. First word indicates status:

  • OK — success, no data
  • OK {json} — success with data (JSON on same line)
  • ERROR: message — failure
  • run-task: OK on first line, followed by log lines