ZJU-REAL/Easel: an open-source AI agent for social media workflows
An open-source AI agent for social media — discover trends, create content, publish everywhere, and learn what works across Xiaohongshu, Douyin, Zhihu, Bilibili, and more.🎨一个开源的 AI 社交媒体智能体——发现热点趋势、创作内容、一键发布至各大平台,并学习分析哪些内容真正有效,覆盖小红书、抖音、知乎、哔哩哔哩等平台。
At a glance
- What is it?
- Easel is a Python project from Zhejiang University's REAL Lab that chains trend discovery, content creation, publishing and attribution across Chinese platforms. It is a workbench, not a scheduler, and the README warns against unattended posting to Xiaohongshu.
- Who is it for?
- Adopt Easel if you publish regularly to Xiaohongshu, Douyin, Kuaishou, Zhihu, Bilibili or WeChat Channels and want one agent to carry a topic from hot-list discovery to a checked, platform-adapted post. Do not adopt it if you need unattended posting at scale, if your stack is outside those six Chinese platforms, or if you cannot supply your own model keys for the media skills you intend to use.
- 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 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Who Easel is built for, and the gap it fills
Most content tooling splits into two camps: schedulers that queue posts you have already written, and chat assistants that suggest ideas but never produce a file. Easel targets the space between them. It is an open-source content workbench for social media creators, assembled around an OpenClaw Agent, per-account profiles, a library of content skills and media tooling. The README frames the goal plainly: the agent should not stop at answering what to do, it should produce the content and archive it, with direct or on-demand publishing.
The intended user is someone running one or more accounts on Chinese platforms. The README lists login, adaptation and publishing support for six: Xiaohongshu, Douyin, Kuaishou, Zhihu, Bilibili and WeChat Channels. If your distribution is LinkedIn, X or a newsletter, the publishing layer has nothing to offer you.
The distinguishing claim is persistence. Each account carries its own positioning, style, audience, platform set, preferences and memory, and outputs are supposed to converge on that account over time rather than resetting with every prompt. That is a design commitment, not a feature toggle, and it is the main reason to pick Easel over a general chat client with a good prompt.
The five-stage pipeline and how artifacts move through it
Easel organizes work as five consecutive stages: discovery, planning, creation, publishing and attribution. Discovery aggregates hot lists, industry news, competitor activity and user discussion, then filters for opportunities that fit the account. Planning turns an opportunity into a topic, title, script and content matrix written into a content calendar. Creation generates copy, cards, posters, infographics, audio, video, short drama and paper explainers. Publishing adapts title, body, aspect ratio and media requirements per platform, runs a pre-publish check and sends to a logged-in account. Attribution reads plays, interactions, comments and performance, and writes effective structures and preferences back into the account profile.
The mechanism that makes this more than a menu is the skill layer. The README states that image, card, voiceover, subtitle, editing, short-drama and publishing skills each ship with runnable scripts, and that finished artifacts are written into `outputs/`. The repository layout backs this up: `skills/`, `outputs/`, `profiles/` and `easel/` sit at the top level alongside `openclaw/` and `web/`. Artifacts are saved per project with content, source material, intermediate files and metadata, so a revision or retry does not disappear into a chat log.
One topic can be rewritten into a Xiaohongshu card set, a short video, a Zhihu long-form piece or a short post, each following its platform's format and length constraints. The README describes this as one source asset, multiple platform shapes. The pipeline is the product; the model is a component inside it.
Installing Easel and running the web workbench
Easel requires Python 3.10 or newer, per both the README badge and `pyproject.toml`. The repository ships `setup.sh` and `setup.ps1` at the top level, and the README's own instruction for environment configuration is to copy the example file and fill in real values.
Start by copying the environment template. The file documents `ANTHROPIC_API_KEY` and `CLAUDE_MODEL` as the standard path, with optional Anthropic-compatible, OpenAI and embedding settings commented out.
cp .env.example .envThe default model entry uses the OpenClaw provider/model format, so leave it as written unless you are pointing at a different provider:
ANTHROPIC_API_KEY=sk-ant-REPLACE_ME
CLAUDE_MODEL=anthropic/claude-sonnet-4-6
OPENCLAW_PORT=18789The package declares a console entry point, `easel = "easel.cli:main"`, and `uvicorn` is listed specifically for the `easel web` command. The README recommends the web frontend over the CLI, because the frontend carries the full session, asset, account, profile, content library and publishing management surfaces.
easel webMedia generation is optional and configured per provider. The environment file separates `VIDEO_PROVIDER`, `MUSIC_PROVIDER` and `VOICE_PROVIDER`, and notes that a single DashScope key can be reused across several media capabilities. Keys left empty simply do not enable that provider, so a first run with only the Anthropic key will still give you discovery, planning and text creation.
The Xiaohongshu publishing risk the README states outright
The README's usage notes contain a warning that deserves more weight than its placement suggests. It advises caution when auto-publishing to Xiaohongshu, because the platform may detect automated operation, creating risk of verification, rate limiting or account control measures. The recommendation is to use preview and the pre-publish check, then have the user confirm and post manually. Other platforms are described as normal in the same note.
That is an unusual admission for a project whose selling point is publishing everywhere, and it should shape how you deploy Easel. Browser-driven publishing through Playwright, which appears in the dependency list, is inherently more fragile than an official API. Platform-side changes can break a login flow without any change on your side. If your workflow assumes hands-off posting to Xiaohongshu, Easel is the wrong tool for that specific step, and the maintainers say so.
A second constraint is breadth of configuration. Text creation needs one model key. Video, music and voice each need their own provider credentials, and the README notes these can also be entered per skill in the web skill library. The gap between a working text pipeline and a working video pipeline is a set of separate accounts and keys, not a single switch.
How Easel differs from a scheduler or a generic agent framework
The obvious comparison is a social media scheduler. A tool in that category assumes the content exists and manages timing, queues and cross-posting. Easel assumes the opposite: the content does not exist yet, and the scheduling question is downstream of discovery, planning and generation. The two are complementary rather than substitutes, and Easel's calendar is a planning surface, not a queue you hand finished drafts to.
The closer comparison is a general-purpose agent framework with browser and media tools bolted on. The difference in approach is that Easel hard-codes the domain. The account profile is a first-class object that persists across platforms and sessions. The skill library is organized around social media tasks rather than generic tool calls, and the attribution stage writes back into the profile, which is what the README means by a partner that remembers you. A generic framework gives you primitives and no opinion about what a good Xiaohongshu note looks like.
That domain coupling is also the cost. Easel's value is concentrated in the six supported platforms and in Chinese-language content formats. Pointed at a different market, much of the skill library and the publishing layer stops applying, and what remains is a thinner agent harness.
Maintenance, licensing and what to verify before adopting
Easel is licensed under Apache-2.0, which permits commercial use, modification and redistribution, and includes an explicit patent grant. The practical implication for a team embedding Easel in a product is that the licence does not force you to open your own code. It does require that you preserve the licence and notices, and Apache-2.0 does not grant trademark rights, so the Zhejiang University and Peking University marks in the README assets are not yours to reuse. That is a summary of the licence text, not legal advice; have counsel review anything you ship.
The project is not archived. The last push to the default branch was on 2026-09-10, ten days before this writing, and the most recent release, v0.1.0, was published on 2026-08-31. Version 0.1.1 appears in `pyproject.toml`, so the repository is ahead of the tagged release. That version gap is worth noting: if you install from the repository rather than from the v0.1.0 tag, you are running code that has not been through a release.
Upgrade cost is dominated by the dependency list. It pins upper bounds on FastAPI, Playwright, faster-whisper, rembg, biliup and others, which limits surprise breakage but also means you cannot freely upgrade those libraries alongside Easel. Media dependencies such as opencv-python, librosa and rembg are large, so installation is heavier than a typical Python web service. The README does not document a rollback procedure for a failed publish or a failed upgrade, and it does not describe a migration path for the `profiles/` and `outputs/` directories between versions; treat backups of those directories as your own responsibility.
Editorial conclusion
Adopt Easel if you publish regularly to Xiaohongshu, Douyin, Kuaishou, Zhihu, Bilibili or WeChat Channels and want one agent to carry a topic from hot-list discovery to a checked, platform-adapted post. Do not adopt it if you need unattended posting at scale, if your stack is outside those six Chinese platforms, or if you cannot supply your own model keys for the media skills you intend to use. Before committing, run `easel web` and confirm each publish target you care about can actually log in, since the README singles out Xiaohongshu as the platform where automation may trigger verification or rate limiting.
Frequently asked questions
What is Easel used for?
Easel is an open-source AI agent for social media content work. It runs a five-stage workflow of discovery, planning, creation, publishing and attribution across Xiaohongshu, Douyin, Kuaishou, Zhihu, Bilibili and WeChat Channels.
What is the Easel app?
In this project, Easel is a Python 3.10+ content workbench built around an OpenClaw Agent, per-account profiles and a skill library, with a web frontend that the README recommends over the CLI. It is not a mobile app; it runs locally and is configured through a .env file.
How do you install Easel?
The repository ships setup.sh and setup.ps1, and the README's configuration step is to copy .env.example to .env and fill in ANTHROPIC_API_KEY and CLAUDE_MODEL. The package requires Python 3.10 or newer and declares an easel console entry point.
How do you use Easel?
The README recommends the web frontend, started with the easel web command, because it carries the session, asset, account, profile, content library and publishing management surfaces. From there you build an account profile, let the agent discover and plan, generate content into outputs/, and publish after the pre-publish check.
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/zju-real-easel)