Spreado: A Python CLI for Cross-Posting Video to Chinese Social Platforms
Spreado is an open-source social media automation publishing tool for creators. It syncs and publishes video content with one click to major Chinese platforms like Douyin, Xiaohongshu, Kuaishou and WeChat Channels, helping individual creators and MCN agencies distribute and manage content efficiently.
At a glance
- What is it?
- Spreado is an open-source Python tool that uploads video to Douyin, Xiaohongshu, Kuaishou, and Tencent Shipinhao from one command line. Its value depends on how well its browser automation survives platform login changes.
- Who is it for?
- Adopt Spreado if you are a solo creator or small MCN posting the same video to multiple Chinese platforms and you can tolerate re-login maintenance. Do not adopt it if you need guaranteed uptime, non-browser uploads, or support for platforms beyond the four listed.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Star history
- BadKid90s/Spreado144 ★ · +24
| Repository | 2026-08-22 | 2026-10-22 |
|---|---|---|
| BadKid90s/Spreado | 120 | 144 |
24 Stars in the last 61 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What Spreado Automates and Who Needs It
Spreado solves a repetitive task: uploading the same video file to Douyin, Xiaohongshu, Kuaishou, and Tencent Shipinhao without opening each site's web interface. The README positions it for individual creators and MCN agencies that want to distribute content efficiently. The tool also supports scheduling, draft saving, and metadata like titles, descriptions, tags, covers, and location. If you publish to only one platform, this tool adds no value. If you publish to two or more, it replaces a manual sequence of browser tabs and form fills with a single command.
The Mechanism: Browser Automation with Cookie Persistence
Spreado does not use official platform APIs. It drives a real browser, either a detected Chrome or Edge installation or Playwright's bundled Chromium. The login flow opens a browser window, lets you scan a QR code or enter credentials, and then saves the resulting cookie files locally. The README shows a cookie directory structure with per-platform folders and an account.json file. Uploads reuse those cookies, so you log in once per platform and then run uploads without repeated authentication. The design is straightforward but fragile. Any change in a platform's login page, cookie format, or upload endpoint can break the tool until the code is updated.
Installation and First Commands
You can install Spreado three ways. The simplest is a prebuilt executable from the GitHub releases page, with separate binaries for Windows, macOS, and Linux. The README also recommends using uv: run `uv tool install spreado` for a global install, or `uv add spreado` inside a project. A standard `pip install spreado` works as well. After installation, you authenticate per platform with commands like `spreado login douyin` and `spreado login xiaohongshu`. The README notes that Kuaishou uses a separate passport domain, so you must confirm on your phone and wait for the redirect. You can check status with `spreado verify all --parallel`, then upload with `spreado upload all --video video.mp4 --title "My Video"`. Scheduling uses `--schedule 2` for hours from now or a specific date-time string. A `--debug` flag gives detailed logs for troubleshooting.
Configuration and Browser Selection
The tool picks a browser by priority: it detects a system Chrome or Edge, then falls back to an environment variable, then to Playwright Chromium. You can force a channel with `SPREADO_BROWSER_CHANNEL=chrome` or `msedge`, or point to a custom binary with `SPREADO_BROWSER_PATH`. Cookie storage defaults to a `cookies/` directory with subfolders per platform and account. You can specify a custom cookie path with `--cookies` on each upload command, which supports multi-account setups by using different account names instead of `default`. The environment variable approach is useful in headless CI environments, but the README does not describe a headless mode, so you likely still need a display for the initial login.
Python API and Plugin Architecture
Beyond the CLI, Spreado exposes a Python API. The README gives an example that imports `DouYinUploader` from `spreado.plugins.douyin.uploader`, initializes it with a cookie file path, and calls `upload_video_flow` with file, title, content, tags, and thumbnail. This is useful if you want to integrate uploads into a larger content pipeline. The project also claims a plugin architecture: new platforms can be added by placing code in a `plugins/` directory without changing core code. That is a sound design for extensibility, but the README does not document the plugin interface or provide a template, so adding a new platform requires reading the existing plugin source.
Real Limitations and Failure Modes
The most obvious limitation is dependence on browser automation. Cookie expiry is a known issue; the README advises re-running `spreado login <platform>` when uploads fail, but it does not automate re-authentication. If a platform changes its login flow, the tool may break entirely until a new release. The README also notes that Xiaohongshu requires a cover image, so an `upload all` command without `--cover` will likely fail for that platform. Scheduling is limited to a single command-line flag; there is no recurring schedule or calendar integration. Finally, the tool supports only four platforms. If you need Bilibili, Weibo, or YouTube, this is the wrong tool.
Alternatives and Their Different Approaches
The main alternative is a social media management platform like Hootsuite or Buffer, but those do not target Chinese platforms well. A closer alternative is a dedicated Chinese multi-posting service such as 蚁小二 or 易媒, which offer official API integrations or web-based dashboards. The difference is that those services handle authentication centrally and update their integrations when platforms change, while Spreado puts that maintenance burden on you. Another open-source option is using each platform's official API directly, but that requires separate credentials and per-platform code. Spreado's advantage is a unified CLI and local cookie storage; its disadvantage is that you own the breakage risk.
Maintenance, License, and Upgrade Cost
The project is licensed under Apache-2.0, which permits commercial use, modification, and distribution with attribution. The repository shows active development, with releases v1.0.2, v1.1.0, and v1.2.0 between February and May 2026. That cadence suggests the maintainer is fixing issues, but it also means you should watch for breaking changes between versions. Upgrading is simple with `pip install --upgrade spreado` or `uv tool upgrade spreado`, but each upgrade may change CLI flags or cookie formats. The README does not document a migration path for cookie files across versions. For a production workflow, you should pin the version and test after each upgrade.
Editorial conclusion
Adopt Spreado if you are a solo creator or small MCN posting the same video to multiple Chinese platforms and you can tolerate re-login maintenance. Do not adopt it if you need guaranteed uptime, non-browser uploads, or support for platforms beyond the four listed. Before relying on it, verify that the login flow still works for each platform you target, test with a single non-critical account, and check the GitHub issues for recent reports of cookie expiry or upload failures. The project is active as of May 2026, but its core dependency on browser automation means you must budget time for periodic fixes.
Frequently asked questions
What does Spreado do and which platforms does it support?
It is a command line tool and Python library that publishes one video to Douyin, Xiaohongshu, Kuaishou and Tencent Channels. You log in to each platform once, the session is stored as a cookie file, and an upload command targets either one platform or all of them, with options for a description, tags, a cover image and a schedule.
How do I install Spreado?
Four routes are documented: download a prebuilt executable for Windows, macOS or Linux in x64 or ARM64 form, install it with uv either as a global tool or into a project, install it with pip, or clone the repository and sync a uv environment. The readme numbers two of these as the same method, so follow the heading text rather than the number.
Do I need to install a browser to use Spreado?
No. It looks for Chrome or Edge already installed on the machine first, then honours an environment variable naming a browser channel or a binary path, and only falls back to the Chromium that Playwright bundles. You can install that fallback yourself with the Playwright chromium installer if you would rather not wait for a failed detection.
How does Spreado handle cookies and multiple accounts?
Each login writes a cookie file under a directory named for the platform, then an account name, then a fixed filename, with the default account name used unless you change it. For a second account you either point the upload command at a different cookie file with the cookies option, or add another account directory in place of the default one.
Why does the Kuaishou login page jump away after I scan the code?
Kuaishou signs in through a separate passport domain, so the redirect after scanning looks like the flow ended. Confirm on the phone and leave the browser open: the login detection waits for the phone-side confirmation and then lets the redirect happen on its own, with no manual step needed.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/badkid90s-spreado)Star history chart for your README
[](https://hysenlabs.com/projects/badkid90s-spreado)