Douyin Upload Skill

WarnAudited by ClawScan on May 18, 2026.

Overview

The skill mostly matches its Douyin upload purpose, but it under-declares credential use and its default transcription path can upload video audio to a cloud ASR provider despite local/privacy claims.

Install only if you are comfortable granting Douyin publishing access and handling local video/audio data. If privacy matters, set ASR mode to local Whisper, verify the ASR URL, keep auto-confirm disabled, and periodically clear transcript/outbox files.

Findings (7)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

A user may believe video audio stays local when the default transcription path can send extracted audio to a cloud provider.

Why it was flagged

The README makes a strong privacy/local-only claim while also saying third-party API ASR is the default; the code confirms audio can be sent to an ASR API.

Skill content
“全程不需要将视频原声上传给任何云端 ASR 服务,绝对保护隐私!” ... “ASR 三模式:支持 `第三方服务 API`(默认)”
Recommendation

Clarify the README/SKILL.md wording, make local Whisper the default if privacy is promised, and require explicit user acknowledgement before cloud ASR upload.

What this means

Private speech from local videos may leave the machine for transcription unless the user switches to a local Whisper mode.

Why it was flagged

The selected video's extracted audio is sent to a configurable ASR API endpoint with an API key; constants set API ASR as the default mode and OpenAI as the default URL.

Skill content
form.append("file", new File([fileBuffer], fileName, { type: "audio/wav" })); ... response = await fetch(apiUrl, { method: "POST", headers: { Authorization: `Bearer ${apiKey}` }, body: form, ... })
Recommendation

Before use, verify DOUYIN_ASR_MODE and DOUYIN_ASR_API_URL; use whisper-cpu/whisper-gpu for local-only transcription.

What this means

Users and installers may not receive a clear permission warning that the skill uses account credentials and can publish through a Douyin account.

Why it was flagged

This is materially incomplete because SKILL.md requires DOUYIN_CLIENT_KEY, DOUYIN_CLIENT_SECRET, and DOUYIN_REDIRECT_URI before auth/publish, and the code stores OAuth tokens for later publishing.

Skill content
Required env vars: none; Env var declarations: none; Primary credential: none
Recommendation

Declare required credentials, OAuth scopes, token storage, and publishing authority in metadata/capability signals.

What this means

If used with the wrong caption, visibility, or auto-confirm settings, it could post unintended public content.

Why it was flagged

Publishing public Douyin videos is the skill's purpose and the documented example keeps confirmation off by default, but it remains a high-impact account action.

Skill content
`publish`: uploads and creates video via official API ... `--private-status 0` ... `--auto-confirm false`
Recommendation

Review the final caption and visibility every time, and leave auto-confirm disabled unless running a deliberately controlled automation pipeline.

What this means

The skill will invoke local programs as part of normal operation.

Why it was flagged

The skill runs a local command to open the OAuth URL; related media processing also relies on local ffmpeg/ffprobe/whisper binaries.

Skill content
const proc = spawn("xdg-open", [url], { detached: true, stdio: "ignore" });
Recommendation

Use trusted system binaries and review configured binary paths before running.

What this means

A compromised or changed upstream dependency/model could affect local transcription behavior.

Why it was flagged

The setup instructions download external source/model artifacts without pinning a commit or checksum; this is user-directed and purpose-aligned for local ASR.

Skill content
git clone https://github.com/ggerganov/whisper.cpp.git ... curl -L https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
Recommendation

Pin commits or checksums for external tools/models if using this in a sensitive or repeatable environment.

What this means

Transcripts, captions, and source-path metadata may remain on disk after publishing or fallback export.

Why it was flagged

The skill stores transcript cache and fallback outbox data locally for reuse; this is bounded to selected videos but can retain sensitive captions/transcripts.

Skill content
const DEFAULT_TRANSCRIPT_CACHE_DIR = path.join(CACHE_DIR, "transcripts"); ... const DEFAULT_OUTBOX_DIR = path.join(DATA_DIR, "outbox");
Recommendation

Clear cache/outbox directories when finished and set custom directories if you need stricter retention controls.