XPAI Doubao Web
Overview
Use this skill to generate images or text from Doubao Web by reusing browser login cookies. It provides a CLI wrapper with prompt files, optional reference images, presets, sessions, and JSON output.
Script Directory
All scripts are located in the scripts/ subdirectory of this skill.
Script reference:
scripts/main.ts: CLI entry point (image/text)scripts/doubao-webapi/*: TypeScript client and helpers
Consent Check (required before first use)
This skill relies on reverse-engineered web behavior and will access/store your Doubao Web cookies. Obtain explicit user consent before running automation.
Consent file locations:
- macOS:
~/Library/Application Support/xpai-skills/doubao-web/consent.json - Linux:
~/.local/share/xpai-skills/doubao-web/consent.json - Windows:
%APPDATA%\\xpai-skills\\doubao-web\\consent.json
Consent file format:
{"version":1,"accepted":true,"acceptedAt":"<ISO>","disclaimerVersion":"1.0"}
Preferences (EXTEND.md)
Check for optional EXTEND.md overrides in this order:
# Project-level first
test -f .xpai-skills/xpai-doubao-web/EXTEND.md && echo "project"
# Then user-level
test -f "$HOME/.xpai-skills/xpai-doubao-web/EXTEND.md" && echo "user"
Supported settings (if you add parsing for them): default model, proxy settings, custom data directory.
Usage
# Text-to-image
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts "Your prompt"
# Text-only
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --mode text --prompt "Summarize this article"
# Specify model
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --prompt "Your prompt" --model doubao-default
# Generate an image file
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --prompt "A cute cat" --image out.png
# Prompt from files
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --promptfiles system.md content.md --image out.png
# Vision input (reference images)
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --prompt "Create variation" --reference a.png --image out.png
# Preset (aspect ratio via prompt prefix/suffix)
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --preset xiaohongshu_cover --prompt "Minimalist poster" --image out.png
# List presets
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts --list-presets
# Multi-turn sessions
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts "Remember: 42" --sessionId session-abc
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts "What number?" --sessionId session-abc
# JSON output
npx -y bun /Users/aqxp/Aicodingmac/test2/xpai-doubao-web/scripts/main.ts "Hello" --json
Options
--prompt,-p: Prompt text--promptfiles: Read prompt from files (concatenated)--model,-m: Model string (pass-through)--mode:image(default) ortext--preset: Preset name (applies prompt prefix/suffix; defaultxiaohongshu_cover)--image [path]: Generate image (default:generated.png)--reference,--ref: Reference images for vision input--sessionId: Session ID for multi-turn conversation--list-sessions: List saved sessions--list-presets: List preset names and config paths--json: Output as JSON--login: Refresh cookies, then exit--cookie-path: Custom cookie file path--profile-dir: Chrome profile directory
Authentication
Login uses browser cookies. The CLI supports:
--loginto trigger a browser-based refresh (implemented with Playwright).--cookie-pathorDOUBAO_WEB_COOKIE_PATHto point at an exported cookie file.
Flow notes:
--loginopens a visible browser window and saves cookies.- Image/text generation runs headless by default (no window). Set
DOUBAO_WEB_HEADLESS=0to show the browser. - If a cookies file already exists, generation proceeds without opening a browser.
- To force a fresh login, delete the cookies file or run
--loginagain.
For --login and image generation, install Playwright and its browsers:
npm i -D playwright
npx playwright install
Supported browsers (Playwright): Chromium/Chrome/Edge.
Override browser path via DOUBAO_WEB_CHROME_PATH. If you pass --profile-dir, it is used as a Playwright user data directory.
Presets
Preset config path priority:
DOUBAO_WEB_PRESETS_PATH.xpai-skills/xpai-doubao-web/presets.json(project)$HOME/.xpai-skills/xpai-doubao-web/presets.json(user)
Format:
{
"default": "xiaohongshu_cover",
"presets": {
"xiaohongshu_cover": { "prefix": "...", "suffix": "..." }
}
}
Example file: references/presets.example.json
Environment Variables
DOUBAO_WEB_DATA_DIR: Data directoryDOUBAO_WEB_COOKIE_PATH: Cookie file pathDOUBAO_WEB_HEADLESS: Set to0to run browser in headed mode (default: headless)DOUBAO_WEB_MAX_IMAGES: Max images to save (default:1)DOUBAO_WEB_LOGIN_URL: Login URL to open in the browser (default:https://www.doubao.com/)DOUBAO_WEB_COOKIE_DOMAIN: Filter cookies by domain (default:doubao.com)DOUBAO_WEB_PRESETS_PATH: Preset config file pathDOUBAO_WEB_INPUT_SELECTOR: Custom input selector for the prompt boxDOUBAO_WEB_OUTPUT_SELECTOR: Custom selector for the latest assistant messageDOUBAO_WEB_CHROME_PROFILE_DIR: Chrome profile directoryDOUBAO_WEB_CHROME_PATH: Chrome executable pathHTTP_PROXY,HTTPS_PROXY: Proxy for web access
Sessions
Session files are stored in the data directory under sessions/<id>.json.
Contains: id, conversationUrl, messages, timestamps. When --sessionId is set, a persistent Playwright profile is stored under profiles/<id>/ to keep login state.