fxai-poster · Poster & Image Design
A well-designed image: video cover / poster / article illustration / social graphic / e-commerce image / infographic / video embedded graphic all go here.
This skill is the single source of truth for AI image design specifications: any skill that outputs images follows the specifications and quality gates defined here—no separate rules are written elsewhere.
Skill File Index (Read this first, then decide which files to read)
| File | When to Read |
|---|---|
references/01-mode-selection.md | Must read before starting: Should this be web / image / hybrid? |
references/02-web-mode-layout.md | web / hybrid layout, theme, cover copy structure, attention-grabbing criteria |
references/03-image-generation-and-hybrid-mode.md | Writing image generation prompts, adjusting base image masks |
references/04-attaching-to-video-first-frame.md | Placing a poster onto an MP4 (method, two critical pitfalls, validation) |
references/05-cover-template-library.md | Must read for video covers: 8 styles, cover segment length and audio track |
references/06-text-and-infographic-layout.md | 3+ info blocks: structure selection, numbered cards, icon color schemes |
references/07-narrative-and-information-hierarchy.md | Defining the thesis, emotional intensity, aspect ratio & readability gates (cross-mode universal) |
references/08-image-type-matrix.md | Must read when defining type: 15 use-case dimensions, required elements, inspection focus |
references/09-quality-gate.md | Must read before delivery: Three gates with criteria and rework paths |
references/10-qianwen2.1-prompt-specification.md | Must read for writing prompts: Six-section skeleton, quotation rules, character binding, dimensions, cross-skill calls |
references/11-cover-multi-size-and-platform-specifications.md | Cross-platform covers: dimension keys, margin sides, image generation priority, acceptance |
references/svg-icons.md, references/infographic-template.html | 23 inline SVG icon snippets; infographic layout example (reference only) |
poster.py, cover_batch.py | Image output entry point; --gen-cover with text / --gen-base textless base image |
cover_styles.py, cover_side.py | 8 styles (render / render_matrix); determines text side based on base image whitespace |
cover_prompt.py | Layout → image generation prompt; the third paragraph of the six-section skeleton fully describes the layout |
cover_sizes.json | Single source of truth for dimensions and site specifications |
qc.py | Three checks: pre / prompt / post / types |
Do not read anything else.
Modes & Styles
hybrid (AI image base + text overlay) / image (AI generated image, text written into the prompt appears in the image) / web (pure typographic layout); for covers, prefer image with text.
Criteria and decision logic are in 01 file; default modes for 15 use cases are in 08 file. 8 style keys are in 05 file; multi-size output is in 11 file; each video must produce at least 2 versions (with/without a person).
Quality Gates (Must pass before delivery, three gates)
If any gate returns FAIL, do not proceed. Follow the rework instructions in the report and rerun.
python qc.py pre --kind record_cover --w 1680 --h 1054 --mode hybrid --title "…" --hooks "数字前置,反差反转"
python qc.py post --img cover.png --kind record_cover # Other two gates: prompt / types
- Pre-check: Aspect ratio / mode / required elements / text overflow / insufficient attention-grabbing
- Prompt Gate: Six-section skeleton + text area four elements (quotes·position·font size·font color) + clothing
- Output Gate: Aspect ratio / resolution / brightness / layering / PSNR are hard gates; sharpness is divided into three tiers (
SHARP_TIER); add--no-textfor pure image output
Criteria and rework paths are in references/09-quality-gate.md.
Hard Rules
-
🔴 Dimensions follow use case, always use the key from
cover_sizes.json: Vertical video coververt_9x16(1080×1920), horizontalhoriz_16x9(1920×1080); for other use cases, specify the key as needed—this file does not list pixel values. -
🔴 Screenshots and ffmpeg temporary files are placed under the system temporary directory
fxai_burn/poster/(script creates it automatically, use ASCII paths); the final product is copied back to the project—Chinese paths will causefile://and ffmpeg filter parsing to fail. -
🔴 Color scheme changes only modify CSS variables in
themes/*.css; do not hardcode colors in HTML. -
🔴 Fonts follow the whitelist in
fxai-standard/references/06-font-and-asset-licensing.md; if a font is missing locally, fall back to an installed Chinese font and record it in the delivery manifest. -
🔴 Media platform assets default to bare output: No URLs, contact info, QR codes, follow prompts, brand signatures, or logo slots (criterion: images for media platforms carry no traffic-steering information). Only for brand website posters / external materials, explicitly use
--brand/--site. -
🔴 Attention-grabbing is the number one requirement for covers: The criterion is whether scrolling past makes someone pause; each image must hit at least 2 attention-grabbing elements (trending keywords / number-first / contrast-reversal / identity tags / result promises / urgency).
-
🔴 Cover main title must follow a "positive → twist" two-layer structure: First line states the achievement, second line (accent color) states the cost/truth; capsule mentions trending tech keywords; each line ≤ 7 characters (including punctuation).
-
🔴 Pure text posters have the strongest impact: no decorative images, no close-up faces, title no more than two lines.
-
🔴 Cover segment length (frames) and audio track padding are only defined in
references/05-cover-template-library.mdunder "Cover Segment Duration"; this file does not specify values.
🔴 The cover must be applied before mixing the BGM: The cover segment carries a pad sound, not a soundtrack; BGM is the final step applied to the entire video after the cover is in place. See section 1d in04file. -
🔴 This skill does not generate video: Video is output by
fxai-audio-video/fxai-mv-pipeline/fxai-short-drama; this skill only delivers images or applies to the first frame. -
🔴 3+ info blocks use infographic layout (
06file); a single cover carries only one thesis. -
🔴 Readability gate (
07file): Measured contrast for body text ≥4.5:1, large text ≥3:1; thumbnail at 200px the main title is readable; recompose when changing aspect ratio, do not crop; icons inline SVG, no emoji, color values hardcoded in hex. -
🔴 Must pass all three quality gates before delivery (
09file): Any FAIL means no delivery; if the base image is unqualified, regenerate it—do not try to fix it with post-processing. -
🔴 Cover dimensions only recognize keys, default output is only two sizes: Pixel values and per-site specs are only in
cover_sizes.json; logs/projects only referencevert_9x16/horiz_16x9, and the projectcover.jsonsizesfield only lists these two keys; other keys are generated only when explicitly specified by the user. 🔴 Platform upload frame ratios (Douyin vertical 3:4 / horizontal 4:3) are the platform's own cropping frames, not a reason to output a third size; vertical text must fall within the 3:4 safe area. Seereferences/11for details. -
🔴 Cover text is rendered by default directly in the image: Layout specifications are written via
cover_prompt.pyinto the third paragraph of the prompt (--gen-cover); "no text in the image" is only allowed for the overlay layer path (--gen-base). See11file. -
🔴 Single Responsibility: Image generation is always delegated to
fxai-scene-gen; service discovery belongs tofxai-workflow; browser operations usegpu.chrome_exe()fromfxai-slide-video; ffmpeg usesav.ffmpeg_libass()fromfxai-audio-video. This skill does not know or configure service addresses, and does not hardcode executable file paths.
For the writing and criteria of rules 5–8 above, see references/02-web-mode-layout.md.
Quick Start
# hybrid (default: AI image base + text overlay)
python poster.py --mode hybrid --out-dir <project> --name cover --size 1680x1054 \
--prompt "…" --title "She's back|This time she won't back down" --tag "Ancient Costume Short Drama · Episode 3" --overlay 0.5
# image (cover: text written into the prompt, text appears directly in the image)
python poster.py --mode image --out-dir <project> --name mv_cover \
--prompt "…(six-section skeleton, third paragraph fully describes layout)…" --size 1080x1920
# Attach to first video frame
python poster.py --mode web --out-dir <project> --name cover --title "…" \
--attach-video <project>/final.mp4 --cover-frames 10
For web mode layout parameters (--theme / --kicker / --sub / --keys), see 02-web-mode-layout.md.
Intro Information Overlay
When attaching to the first frame, overlay "Production / Drama Name / Episode Name / Selling Points / Credit" using intro_card.py; commands, masks, and crop specifications are in references/04-attaching-to-video-first-frame.md under "Intro Information Overlay".
Project Checklist (Page displays progress based on it)
Create a record when the output directory is built, update on each completed section; see fxai-standard 01 file for structure.
P=~/.workbuddy/skills/fxai-standard/scripts/fxai_project.py
python "$P" init "<project>" --title <name> --category image --skill fxai-poster
python "$P" stage "<project>" --script 2 --image 1 --audio 0 --video 0