Yingzao: a Claude Code and Codex skill that turns architecture photos into art-directed Chinese editorial posters
🏯 Claude Code / Codex skill — transform Chinese architecture, cultural places & travel photos into art-directed editorial posters with GPT Image. 中国古建筑与在地文化照片 → 艺术指导海报
At a glance
- What is it?
- Yingzao is an agent skill for GPT Image that reads a photograph's composition and identity, then rebuilds it as an editorial poster with designed Chinese display type. It is aimed at architecture and travel photography, not at product shots or ordinary retouching.
- Who is it for?
- Adopt Yingzao if you already run an agent that can read local images and call an image generation or editing tool, and your subject is built space: old buildings, historic streets, gardens, craft objects, local food. Do not adopt it for e-commerce main images, for sharpening or sky replacement, or for invented architecture with no real place behind it.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 13 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Yingzao solves, and for whom
Most photo-to-poster pipelines do one of two things. They apply a look to the whole frame, or they paste a title onto empty space. Yingzao's README states the goal as neither: it produces a poster that has been through art direction, where subject treatment, an active colour field, regional material and type occlusion all sit in the same visual world.
The intended user is narrow. The README lists what fits: ancient buildings, historic districts, vernacular houses, gardens and local spaces; cultural shops, warm-lit interiors, handmade objects and regional food; travel covers, single-image editorial posters and multi-image shared scenes. The unsuitable list is just as explicit: ordinary product advertising and e-commerce main images, routine retouching that only wants exposure, blemish removal, sharpening or a sky swap, invented ancient architecture with no real place behind it, and tasks that only need deterministic collage with type stuck on afterwards.
That split matters because the skill spends real work on identity. According to the README it protects roof slopes, flying eaves, plaques, silhouettes and asymmetry as identity anchors, and explicitly refuses to optimise a real building into a different one. If your subject has no identity worth protecting, the machinery is overhead.
The four-domain brief that runs before any reference image is opened
The mechanism the README describes is a fixed order of operations, and the order is the point. First a photo preflight and a fact boundary. Then a creative proposition that covers four domains (subject, background, type-image interaction and typographic action) and is deliberately written before any reference is consulted. The README gives the reason: looking at references first makes the result more mediocre the more references you have.
Only after that does Recipe retrieval pick one dominant reference. The chosen Recipe is compiled into current-photo actions across the same four domains, and those actions are written into the final ImageGen prompt while also being pointed at specific regions of the underlay with markers such as S1, B1 and T1. A handoff checklist before the call verifies that every enabled token actually entered the model input, then locks the three images and the full prompt together. The image model fuses them; it is not asked to re-render a web layout.
The three inputs are fixed for high-stylisation tasks: a corrected original that carries identity, a dominant reference that carries the complete visual mechanism, and a typographic underlay that carries text extent, shared axes, action regions and occlusion relationships. The README notes one specific trap this avoids: for reinterpret titles the skill uses character slots rather than large outlines of an ordinary typeface, so a Song-style underlay is not mistaken for the final lettering.
Installing the skill and running a first poster
The README gives a single install command for agents that support Skills. It pulls the skill named yingzao from the repository rather than asking you to clone anything.
npx skills add https://github.com/op7418/guizang-yingzao-skill --skill yingzaoAfter installation the README says to speak to the agent directly. The example prompt names the place, the aspect ratio and one constraint, and leaves layout decisions to the skill. The README's own sample uses a 3:4 editorial poster and tells the agent not to build a side-by-side comparison with the original.
用 $yingzao 把这张大同古城的照片做成一张 3:4 编辑海报。
地点与标题你根据我提供的信息决定,不需要原图对照拼图。Runtime requirements are listed as an agent that supports Skills, reads local images and can call image generation or editing tools, plus Python 3.10+ and Pillow, NumPy, OpenCV and fontTools. The README says to run the dependency check first. If the current Python is missing packages, the script looks for a compatible .venv in the caller's directory and does not silently install into the global Python.
python3 yingzao/scripts/check_dependencies.pyFor a manual environment the README gives a venv and a requirements install. Note that the path is relative to wherever the skill was placed, not to a fixed agent-private directory; the README's installation note explicitly asks that the repository not be cloned into one agent's private folder.
python3 -m venv .venv
.venv/bin/python -m pip install -r yingzao/requirements.txtThe gates are deterministic, and the diagnostics are deliberately cheap
Yingzao only performs deterministic checks before it calls the image model. The README enumerates them: photo fit, roll and safely fillable regions; facts and text boundaries; compatibility between the dominant reference and the target geometry; the three visible design domains of subject, background and interaction; complete delivery of Recipe tokens to model actions and underlay markers; font cmap coverage and fallback; and contracts for real glyph extents, shared axes, collisions, no-go zones, vertical writing order and subject occlusion.
Everything semantic is left to the model. The README states the principle plainly: use code for what code is good at (measurement, font coverage, collision, alignment, geometry, input handoff) and leave semantic matting, spatial reconstruction, material, light and type-image relationships to the image model.
After generation there is exactly one low-cost image read, checking whether subject treatment, active background, lettering, type-image interaction and the dominant reference mechanism are actually visible, and reporting the most obvious problem. The README is explicit that this does not trigger an automatic regeneration and does not spend a second generation budget. Changes continue only after you give feedback, and the response is split by severity: local lettering or edge problems are edited from the current image, while structural problems in subject, background, main layout or type-image relationship go back to the original photo for a new direction.
Where the workflow breaks down
The most concrete limitation is the one the README states as a design choice: the post-generation read is diagnostic only. If the first edit comes back with a structurally wrong layout, nothing self-corrects. You either accept it, or you spend another generation after describing the problem, and structural fixes restart from the original photo rather than from the current output. For a skill whose value proposition is art direction, that means the quality of your first brief and your feedback carries most of the weight.
The second constraint is the input contract. High-stylisation tasks are described as always using three visual inputs, and a pre-call checklist verifies that every enabled token reached the model. That is a strength when the agent can supply all three, and a hard dependency when it cannot. An agent that reads local images but has no image editing tool, or one that cannot place the underlay, does not have a degraded Yingzao; it has no Yingzao.
The third is scope. The README rules out tasks that only need deterministic collage with type applied afterwards. If your output must be pixel-predictable and reproducible, a generative edit is the wrong instrument, and the skill says so. Fact handling is also bounded: the README notes that if a place, hall name or historical detail is uncertain, you can have the agent search first, and that Yingzao writes only information that has been verified, is visible in the photo, or that you confirmed. It does not verify on its own.
How it differs from a general image-editing agent
The obvious alternative is to hand the same photo to a general-purpose image generation or editing agent with a written style prompt. The difference is not the model. It is what happens before the model is called.
A general agent typically receives one prompt and one image, and any style vocabulary you supply is applied uniformly. Yingzao instead separates the inputs by role: identity comes from the corrected original, the visual mechanism comes from exactly one dominant reference plate, and text extent, shared axes, action regions and occlusion come from a sparse typographic underlay. The README frames the alternative as stringing dozens of style words mechanically into a prompt, and positions the Recipe plus single dominant reference as the replacement.
The second difference is the type. A general agent asked for a Chinese title will usually produce lettering as part of the same generation, with no measurement behind it. Yingzao compiles a Chinese glyph brief covering width, centre of gravity, stroke contrast, terminals, counters, rhythm and surface medium, allows a second conventional family for small text to establish hierarchy, and checks font cmap coverage and fallback before the call. That is a different class of control, and it is also why the dependency list includes fontTools and OpenCV rather than only an image API client.
Maintenance, licensing and what the repository does not say
The repository is not archived, and the last push was on 2026-09-03, which is recent enough that the project is being touched. There are no retrieved releases, so there is no version history to read and no changelog to check before upgrading. Upgrades therefore mean re-pulling the skill and re-reading SKILL.md and the reference files listed in the directory tree, particularly references/preflight-gates.md, which the README calls the single source of truth for gates before an expensive call, and references/image-generation-workflow.md, which covers input order, parameters, prompts and feedback routing.
The licence is a real gap. The repository metadata does not identify one, and the README does not state licence terms. The README does credit the Guizang Social Card Skill for the structure of its installation and usage documentation, which is an acknowledgement, not a licence grant. If you plan to redistribute the skill, bundle it into a product, or ship its reference plates, treat the licence as unresolved and check the repository directly rather than assuming permissive terms. Nothing here is legal advice.
The dependency surface is small and ordinary: Python 3.10+, Pillow, NumPy, OpenCV and fontTools, installed from yingzao/requirements.txt. The README states that the dependency check will not install into the global Python, so the upgrade cost is mostly the cost of re-reading the reference documents when behaviour changes between pulls.
Editorial conclusion
Adopt Yingzao if you already run an agent that can read local images and call an image generation or editing tool, and your subject is built space: old buildings, historic streets, gardens, craft objects, local food. Do not adopt it for e-commerce main images, for sharpening or sky replacement, or for invented architecture with no real place behind it. Before you rely on it, run python3 yingzao/scripts/check_dependencies.py and confirm the agent can see the three inputs the workflow locks (the corrected original, one dominant reference plate and the sparse typographic underlay), because the design only holds when all three reach the model in one edit call.
Frequently asked questions
How do I install the Yingzao skill?
The README gives one command, npx skills add https://github.com/op7418/guizang-yingzao-skill --skill yingzao. After that you invoke it from an agent that supports Skills by writing a prompt such as "用 $yingzao" followed by the photo and the poster you want.
What does Yingzao need installed before it can run?
An agent that supports Skills, reads local images and can call image generation or editing tools, plus Python 3.10+ and the packages Pillow, NumPy, OpenCV and fontTools. The README says to run python3 yingzao/scripts/check_dependencies.py first; if packages are missing it looks for a compatible .venv in the caller's directory instead of installing into the global Python.
Does Yingzao regenerate the poster automatically if the first result is wrong?
No. The README states that after generation there is one low-cost image read that reports the most obvious problem, and that this does not trigger an automatic regeneration or consume a second generation budget. Further changes happen only after you give feedback, and structural problems return to the original photo rather than editing the current output.
Community notes