Memory

Byted Byteplus Vod Precision Erasure

Try it

Upload video/audio media to BytePlus VOD (Video on Demand) storage, returning the Vid and playback references; supports local file upload (ApplyUploadInfo +...

What it does

Uploads video/audio to a BytePlus VOD space (from a **local file** or a **public URL**) and returns a reference. For media already in VOD, submits **precision erasure** tasks ( → ) using **automatic OCR only**. Do **not** tell end users they can change erasure **mode** between Manual and Auto — th…

The skill document

VOD precision erasure

Uploads video/audio to a BytePlus VOD space (from a local file or a public URL) and returns a vid://… reference. For media already in VOD, submits precision erasure tasks (StartExecution → Operation.Task.Type: Erase) using automatic OCR only. Do not tell end users they can change erasure mode between Manual and Auto — this skill always sends Auto. NewVid is always true (not surfaced as a user choice).


Product scope

AspectBehaviour
InputVid or DirectUrl (JSON field video)
Erasure coverageDefault subtitle only (Auto.Type: Subtitle, SubtitleFilter: {}). User may opt into all detected on-screen text via text: true or all_text: true → Auto.Type: Text.
TimelineDefault: whole video (no ClipFilter). Optional clip_filter with mode skip or selected — when either is used, clips is mandatory (non-empty).
Output assetNewVid is always true — not configurable and not prompted.
Erasure metadataDefault with_erase_info: true (WithEraseInfo). If false, stdout EraseMeta is {}; VideoUrls are still populated when Erase.File is returned.

Not supported: Manual mode, custom ratio Locations, tuning SubtitleFilter beyond {}, VideoOption.EncodeMode, overriding NewVid.

Precision erasure allowlist: if you see HTTP 403 or “Permission denied”, explain allowlist / work order per BytePlus VOD.


Prerequisites

  • Environment variables (required; optionally place a .env in the working directory — scripts load it automatically):
    • BYTEPLUS_ACCESSKEY — BytePlus Access Key
    • BYTEPLUS_SECRETKEY — BytePlus Secret Key
    • VOD_SPACE_NAME — VOD space name
  • Execution: examples use uv run python … (python scripts/… works if deps are installed).

Workflow overview

Upload pipeline (local file):
  [S1_APPLY]  ApplyUploadInfo → TOS upload address + SessionKey
  [S2_TOS]    PUT file to TOS (direct or chunked)
  [S3_COMMIT] CommitUploadInfo → Vid
  Output: { Vid, Source, PlayURL, FileName, SpaceName, SourceUrl }

Upload pipeline (URL):
  [S1_UPLOAD] Submit URL upload job (UploadMediaByUrl) → JobId
  [S2_POLL]   Poll QueryUploadTaskInfo → Vid
  Output: { Vid, Source, PlayURL, FileName, SpaceName, SourceUrl, JobId }

Precision erasure pipeline:
  [S3_ERASE]  Submit Erase task (StartExecution / Task.Type Erase) → RunId
  [S4_POLL]   Poll GetExecution → output Erase.File (+ optional Erase.Info)
  Output: { Status, SpaceName, VideoUrls[{ FileId, Vid, DirectUrl, Source, Url }], EraseMeta? }

Before running any script:

  • .env or env vars contain BYTEPLUS_ACCESSKEY, BYTEPLUS_SECRETKEY, and VOD_SPACE_NAME.

Pick the pipeline from user intent:

User intentPipelineEntry script
Upload video to VODUploadscripts/upload.py
Subtitle / on-screen text erasurePrecision erasurescripts/precise_erase.py

S1_UPLOAD & S2_POLL: Upload and Obtain Vid

Calling convention

Run from the Skill root directory (byted-byteplus-vod-precision-erasure/):

# Local file upload (returns Vid when complete)
uv run python scripts/upload.py "/path/to/video.mp4" [space_name]

# URL upload (polls until Vid is returned)
uv run python scripts/upload.py "https://example.com/video.mp4" [space_name]

uv run python scripts/upload.py "https://example.com/sample.mp4" my_space
  • First argument: local file path or public http:// / https:// URL (auto-detected).
  • Second argument (optional): space name; if omitted, VOD_SPACE_NAME is used.
  • Paths and URLs must include a file extension (e.g. .mp4, .mov, .mp3).

Upload flow

Local file (synchronous, three-step):

  1. ApplyUploadInfo (API version 2023-01-01) → TOS address, SessionKey
  2. PUT to TOS (direct < 20 MiB, else chunked)
  3. CommitUploadInfo (2023-01-01) → Vid

URL pull (async + poll):

  1. UploadMediaByUrl (2023-01-01) → JobId
  2. Poll QueryUploadTaskInfo until done (same limits as sibling skill: typically 360 × 5 s)
  3. Return Vid

Output format

On success, one JSON object on stdout, e.g.:

{
  "Vid": "v0d123abc",
  "Source": "vid://v0d123abc",
  "PlayURL": "https://example.cdn.com/xxx.m3u8",
  "PosterUri": "",
  "FileName": "uuid-filename.mp4",
  "SpaceName": "my_space",
  "SourceUrl": "https://example.com/video.mp4",
  "JobId": "job-xxx"
}
  • Preserve Source (vid://…) for downstream skills.

Timeout handling (URL upload)

If URL polling exhausts retries, stderr / JSON includes something like:

{
  "error": "Polling timed out (360 attempts × 5s); the URL pull upload is still processing",
  "resume_hint": {
    "description": "The URL upload has not finished yet; retry with the command below",
    "command": "uv run python scripts/upload.py \"\" [space_name]"
  },
  "JobIds": "job-xxx",
  "State": "running"
}

S3_ERASE & S4_POLL: precision erasure

Calling convention

Run from the Skill root directory (byted-byteplus-vod-precision-erasure/):

# Default: subtitle-only, whole video, WithEraseInfo on
uv run python scripts/precise_erase.py '{"type":"Vid","video":"v0310abc"}'

uv run python scripts/precise_erase.py '{"type":"Vid","video":"vid://v0d225gxxx"}' production_space

# Broader OCR (subtitle + other on-screen text)
uv run python scripts/precise_erase.py '{"type":"Vid","video":"v0310abc","text":true}'

uv run python scripts/precise_erase.py @params.json

# Resume after timeout
uv run python scripts/poll_execution.py '' [space_name]

Parameter reference

ParameterTypeRequiredDescription
typestring✅Vid or DirectUrl
videostring✅Vid or VOD FileName; vid:// / directurl:// stripped automatically
textbooleannoIf true: Auto.Type: Text (more aggressive). Default false → subtitle-only.
all_textbooleannoSynonym for text (if both are set, text is applied first).
clip_filterobjectnoOmit = whole video. If set: mode skip or selected, and clips (non-empty list of { "start", "end" } seconds; Start/End accepted).
with_erase_infobooleannoDefault true (WithEraseInfo). If false, detailed erase geometry is not requested; stdout EraseMeta is {}.

Do not prompt users for Manual mode or NewVid.

Agent prompting (plain language)

Clarify: subtitle-only vs all on-screen text; whole video vs segments (skip / selected + clips); whether they need region-level erase telemetry (with_erase_info). Use conversational labels — avoid exposing raw JSON field names unless the user asks for implementation details.

Output format

On success, one JSON object on stdout, roughly:

{
  "Status": "Success",
  "SpaceName": "my_space",
  "VideoUrls": [
    {
      "FileId": "…",
      "Vid": "v0…",
      "DirectUrl": "path/to/output.mp4",
      "Source": "vid://v0…",
      "Url": "https://example.cdn.com/…"
    }
  ],
  "AudioUrls": [],
  "Texts": [],
  "EraseMeta": {
    "Duration": 57.099,
    "Info": {}
  }
}

When with_erase_info was false, EraseMeta is {}.

  • VideoUrls[0].Url: playable / downloadable when signing succeeds for the space.
  • Source: prefer vid://… when the API returns a new Vid; else directurl://….

Timeout handling (GetExecution polling)

Same pattern as the enhancement skill:

{
  "error": "Polling timed out (360 attempts × 5s); the job is still processing",
  "resume_hint": {
    "description": "The job has not finished yet; resume polling with the command below",
    "command": "uv run python scripts/poll_execution.py '' [space_name]"
  }
}

Environment Variables

NameDescriptionRequired
BYTEPLUS_ACCESSKEYBytePlus Access KeyYes
BYTEPLUS_SECRETKEYBytePlus Secret KeyYes
VOD_SPACE_NAMEVOD space nameYes (or via CLI argument)
VOD_POLL_INTERVALPolling interval (seconds, default 5)No
VOD_POLL_MAXMaximum polling attempts (default 360)No
VOD_URL_EXPIRE_MINUTESSigned URL expiry (minutes, default 60)No
VOD_PLAY_DOMAINForce a specific playback domain (optional, highest priority)No
VOD_HOSTOverride VOD OpenAPI hostname (optional)No

Error Output Format

All failures use:

{"error": "error description"}

References

  • BytePlus VOD Python SDK
  • precision erasure parameter reference
  • API: ApplyUploadInfo (2023-01-01)
  • API: CommitUploadInfo (2023-01-01)
  • API: UploadMediaByUrl (2023-01-01)
  • API: QueryUploadTaskInfo (2023-01-01)
  • API: StartExecution (2025-07-01)
  • API: GetExecution (2025-07-01)

Related skills

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai22 installs8 stars

Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.

by Iván559 installs18 stars

Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.

by nssa.io1.0k installs47 stars

Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.

by Iván855 installs69 stars

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

More from volcengine-skills

Browse all skills

火山引擎联网搜索 API,返回网页/图片结果。联网搜索场景优先使用本 skill。触发词包括:查/搜/找、真的吗/靠谱吗/确认/核实、最近/今天/最新/近期、出处/来源/链接、有什么/有哪些/推荐、价格/政策/汇率/行情、对比/区别/哪个好、听说/据说/不太确定、热搜/热门/火、帮我看/了解一下、求证/辟谣、值不...

by volcengine-skills38 installs29 stars

Install and configure the security-related plugins required by OpenClaw, including the `claw-sentry` plugins. Use this skill when you want to complete instal...

by volcengine-skills28 installs

Generate high-quality images from text prompts using Volcano Engine Seedream models. Supports multiple artistic styles and aspect ratios. Use this skill when...

by volcengine-skills26 installs

Generate videos using Seedance models. Invoke when user wants to create videos from text prompts, images, or reference materials.

by volcengine-skills22 installs

CRITICAL: EXCELLENT at parsing BOTH PDF documents and IMAGES (including LONG SCREENSHOTS, scanned documents, and standard images). Extract structured Markdow...

by volcengine-skills18 installs

基于火山引擎Kickart服务生成抖店/抖音商品营销短视频,支持用户上传自定义图片/视频素材、素材分析、创意分析、故事板创作、成片生成、抖音发布全流程。当用户发送抖店/抖音商品链接、提及「上传素材」「添加图片」「添加视频」「素材分析」「创意分析」「故事板」「生成短视频」「营销视频」「发布视频」「抖音发布」时触发使用。

by volcengine-skills17 installs