easyUpload
Use this Skill to turn a local media package into one or more platform upload tasks. It is an independent public business Skill and does not depend on a content-management workbench. Bilibili video upload is supported through its explicit adapter contract; Douyin and Xiaohongshu are guided routes rather than fixed selectors. Read the platform notes before browser actions.
Operating contract
- Reuse the user's authenticated Chromium browser through Easy WebBridge at
127.0.0.1:17777.
- Select one explicit
browserId and account alias for each target. Never choose the first online browser implicitly.
- Default to
draft-only unless the user explicitly requests publish or schedule in the current task.
- Treat login, CAPTCHA, risk control, identity confirmation, payment, deletion, and final publish as consequential gates. Stop with
needs_user_action when a gate appears.
- Never bypass platform protections, inject credentials, or print tokens, cookies, page content containing personal data, or account identifiers.
- A successful file transfer is not a saved draft; a saved draft is not a published post. Report each state separately.
Input
Prefer a JSON job file. See references/job-schema.md. The agent may create the job from a natural-language request, but must show the normalized targets, account aliases, action, and files before performing browser actions.
Supported content types:
video: one video and an optional cover.
image-post: one or more ordered images and an optional separate cover.
The selfmedia five-file package is optional. When detected, map it into the same job contract; do not require release_ready, Work Library, or repository-specific filenames for other users.
Workflow
- Run
node scripts/easy-upload.mjs validate <job.json>; use --schema-only only for fixtures without real media.
- Run
node scripts/easy-upload.mjs plan <job.json> and review the generated actions.
- For Bilibili, confirm the target is
video, the title/description/tag limits pass, and the plan includes partition and original/转载 declaration fields.
- Run
node scripts/easy-upload.mjs preflight and choose the exact browser/account mapping.
- Create a namespaced session such as
easy-upload-<run-id>-douyin-main; use one session per target account and close only sessions created by this run.
- Navigate to the platform creator center, re-snapshot after every navigation or upload state change, and use semantic selectors or current snapshot references.
- Upload media, wait for platform processing, fill the target-specific title, description, tags, cover, visibility, category, and scheduling fields.
- Re-read the preview or draft page and compare it with the normalized job. Save a draft or stop before publish according to the action.
- Write a redacted run receipt outside the media directory. Include target, account alias, state, timestamps, and user-action blockers; never include tokens or cookies.
- Close the task session in
finally, preserving the user's original tabs.
Platform routing
Read references/platforms.md for platform-specific fields and evidence requirements. Keep selectors and page assumptions in the adapter notes, not in the core job schema. If a platform page has changed, stop safely and report the observed page instead of guessing.
Local commands
node scripts/easy-upload.mjs validate <job.json>
node scripts/easy-upload.mjs plan <job.json>
node scripts/easy-upload.mjs preflight
node scripts/easy-upload.mjs normalize <job.json>
The bundled WebBridge client also supports list, navigate, snapshot, click, fill, upload, screenshot, command, and close-session. Use absolute file paths for uploads.
Completion states
Use only these states in receipts: validated, uploading, processing, metadata_filled, draft_saved, awaiting_confirmation, scheduled, submitted, published, needs_user_action, retryable_error, and failed.
Never report published from a click result alone. Require the platform page to show the resulting post state or a stable post URL.
1---2name: easy-upload3description: Upload local videos, image posts, covers, captions, and tags to authenticated content-platform creator centers through Easy WebBridge. Use when a user asks to upload or publish a finished media package to Douyin, Xiaohongshu, Bilibili, or another supported platform. Bilibili has an explicit adapter; Douyin and Xiaohongshu use page-adaptive guided routes that must re-snapshot and stop on unknown forms. Reuse an existing logged-in browser; do not ask for platform API keys.4---56# easyUpload78Use this Skill to turn a local media package into one or more platform upload tasks. It is an independent public business Skill and does not depend on a content-management workbench. Bilibili video upload is supported through its explicit adapter contract; Douyin and Xiaohongshu are guided routes rather than fixed selectors. Read the platform notes before browser actions.910## Operating contract1112- Reuse the user's authenticated Chromium browser through Easy WebBridge at `127.0.0.1:17777`.13- Select one explicit `browserId` and account alias for each target. Never choose the first online browser implicitly.14- Default to `draft-only` unless the user explicitly requests `publish` or `schedule` in the current task.15- Treat login, CAPTCHA, risk control, identity confirmation, payment, deletion, and final publish as consequential gates. Stop with `needs_user_action` when a gate appears.16- Never bypass platform protections, inject credentials, or print tokens, cookies, page content containing personal data, or account identifiers.17- A successful file transfer is not a saved draft; a saved draft is not a published post. Report each state separately.1819## Input2021Prefer a JSON job file. See [references/job-schema.md](references/job-schema.md). The agent may create the job from a natural-language request, but must show the normalized targets, account aliases, action, and files before performing browser actions.2223Supported content types:2425- `video`: one video and an optional cover.26- `image-post`: one or more ordered images and an optional separate cover.2728The selfmedia five-file package is optional. When detected, map it into the same job contract; do not require `release_ready`, Work Library, or repository-specific filenames for other users.2930## Workflow31321. Run `node scripts/easy-upload.mjs validate <job.json>`; use `--schema-only` only for fixtures without real media.332. Run `node scripts/easy-upload.mjs plan <job.json>` and review the generated actions.343. For Bilibili, confirm the target is `video`, the title/description/tag limits pass, and the plan includes partition and original/转载 declaration fields.354. Run `node scripts/easy-upload.mjs preflight` and choose the exact browser/account mapping.365. Create a namespaced session such as `easy-upload-<run-id>-douyin-main`; use one session per target account and close only sessions created by this run.376. Navigate to the platform creator center, re-snapshot after every navigation or upload state change, and use semantic selectors or current snapshot references.387. Upload media, wait for platform processing, fill the target-specific title, description, tags, cover, visibility, category, and scheduling fields.398. Re-read the preview or draft page and compare it with the normalized job. Save a draft or stop before publish according to the action.409. Write a redacted run receipt outside the media directory. Include target, account alias, state, timestamps, and user-action blockers; never include tokens or cookies.4110. Close the task session in `finally`, preserving the user's original tabs.4243## Platform routing4445Read [references/platforms.md](references/platforms.md) for platform-specific fields and evidence requirements. Keep selectors and page assumptions in the adapter notes, not in the core job schema. If a platform page has changed, stop safely and report the observed page instead of guessing.4647## Local commands4849```text50node scripts/easy-upload.mjs validate <job.json>51node scripts/easy-upload.mjs plan <job.json>52node scripts/easy-upload.mjs preflight53node scripts/easy-upload.mjs normalize <job.json>54```5556The bundled WebBridge client also supports `list`, `navigate`, `snapshot`, `click`, `fill`, `upload`, `screenshot`, `command`, and `close-session`. Use absolute file paths for uploads.5758## Completion states5960Use only these states in receipts: `validated`, `uploading`, `processing`, `metadata_filled`, `draft_saved`, `awaiting_confirmation`, `scheduled`, `submitted`, `published`, `needs_user_action`, `retryable_error`, and `failed`.6162Never report `published` from a click result alone. Require the platform page to show the resulting post state or a stable post URL.