Rednote · Post to Xiaohongshu Image-Text Card
A single link or block of text → 3 vertically oriented images + 1 body of text + 1 pinned top comment.
Default is 3 images (hard limit of 5), body text is 150–220 characters. Less is more: images carry the information, copy focuses on just one point.
1. Pipeline Overview
| Step | What It Does | Output |
|---|---|---|
| 1 Fetch Original | Fetches the post body; if it's a retweet/quote, continue expanding the upstream | Complete fact chain |
| 2 Fact Check | Verifies verifiable information line by line | Fact list |
| 3 Define Hooks | Title + cover large text; make sure they don't repeat | Dual hooks |
| 4 Write Copy | Write 150–220 characters per SOP | Body + top comment + tags |
| 5 Generate Images | 3 images in 3:4 aspect ratio, AI-generated | PNG/JPEG |
| 6 Deliver | Resize to 1080×1440, attach copy | Final images + instructions |
Do not start writing copy before step 3, and do not generate images until step 2 is complete—wrong facts make even the best-looking images a liability.
2. Step 1: Fetch the Original (Key: Expand the Citation Chain)
Only fetching the outermost post is the most common failure point.
A retweet like 'This can also link up?' or 'LOL' has almost no useful information. You must follow the citation chain up until you reach the original source.
For fetching X/Twitter, see references/content-sourcing.md. Key points:
- On domestic networks,
x.comis often resolved to fake IPs (e.g.198.18.x.x), causing the built-in fetch tool to reject it as a 'non-public IP' → usecurlinstead - Use
api.vxtwitter.com/<user>/status/<id>to get structured JSON, including the body, media, like count, and aqrt(quoted retweet) object - Request the
qrtobject recursively until there are no moreqrtobjects - Combine the three layers into a timeline, then determine 'what this event actually is'
After fetching, answer these three questions before moving on:
- What did this post itself say? (Often just one sentence)
- What did the upstream post it quoted/retweeted say? (That's where the real information is)
- Who is the further upstream of that? (Usually the original party involved)
3. Step 2: Fact Check
Claims in posts cannot be directly trusted, especially those with numbers, years, or phrases like 'most,' 'first,' or 'once-in-a-century.'
Types that must be checked:
| Type | Why It's Dangerous | How to Check |
|---|---|---|
| Proper nouns/book titles/product names | Translation or paraphrasing easily distorts | Check official pages/publishers/official websites |
| Numbers and dates | Paraphrasing often shifts by a year | Official announcements, authoritative media |
| Identity of parties involved | Positions may have changed | Official channels |
| Technical identifiers (CVE/CNVD/version numbers) | Getting them wrong is equivalent to spreading misinformation | Official announcements, CERT |
| 'Most/First/Once-in-a-century' | Mostly emotional exaggeration | Find the original statement; downgrade to neutral description |
Principle: Keep the meme, correct the facts. The exaggerated claims of the original post can stay at the 'meme' level, but the information in the images must be verifiable.
Content that cannot be verified: don't put it in the image; you can mention it in the comments section as 'internet rumor,' or don't mention it at all.
Organize the verification results into a table and include it at delivery—this is your ammunition when challenged.
4. Step 3: Dual Hooks (Title / Cover Large Text)
Xiaohongshu is a 'title + cover' dual entry point—they must hit different points, or you waste half the traffic.
Title
- ≤ 15 characters
- Embed 1–2 search keywords (person's name, product name, event name)
- Create an information gap or emotion; don't be flat and narrative
Cover Large Text
- Don't replicate the title
- Do a 'fact shock': a specific, counter-intuitive detail that can be understood at a glance
- Best length: 4–8 characters; can pair with a high-saturation color block as a 'tag'
Correct / Incorrect Examples
| Correct | Incorrect | |
|---|---|---|
| Title | The PM who wrote a book on hacking got owned by PHP | Japan's PM official site taken down by PHP (just a statement) |
| Cover | The publisher is called PHP | (Copy the title directly) |
| Title | Takaichi Sanae's official site, taken down by PHP | Shocking! The PM actually… (Clickbait style) |
Regarding Names: Use real names for known public figures
Don't replace a person's name with generic terms like 'some country's PM' or 'some entrepreneur.' Fame itself is an emotional lever; 'some country's PM' drains all the emotion.
- Dry: The Japanese PM recently expressed views on this topic, sparking discussion.
- Wet: Takaichi Sanae's latest move has maxed out the entertainment value, and netizens are all waiting for the next update.
5. Step 4: Write the Copy
See references/copywriting.md for details. Hard targets:
| Item | Requirement |
|---|---|
| Body word count | 150–220 characters, never exceed 300 |
| Paragraphs | 1–3 lines per paragraph, short sentences, plenty of line breaks |
| Information density | Only hit one core contrast; put all details in the images and comments |
| Emoji | ≤ 3 per entire piece |
| Tags | 5–7: 2 high-traffic + 3 precise search + 1–2 emotional |
Four-Part Rhythm
- Explosive opening (1–2 lines): One sentence to clarify what happened
- Core facts (3–4 lines): Provide background and conflict
- Twist / Irony (2–3 lines): Reveal the most explosive detail
- Casual jab (1 line): A cold, humorous conclusion
Terminology Degradation
Your readers aren't peers. Translate technical terms into everyday actions:
| Original | Degraded |
|---|---|
| High-severity RCE vulnerability | A serious vulnerability was exposed |
| PoC publicly distributed | Hacker attack code is everywhere |
| Temporary site shutdown | Pulled the network cable overnight |
| Unauthorized access | Anyone can get in |
Vocabulary Blacklist (Delete on Sight)
- Forced familiarity: 'Family members,' 'Girlfriends,' 'Who gets it,' 'Absolutely stunning,' 'Totally living for this'
- Press release tone: 'According to reports,' 'It's worth mentioning,' 'In summary'
- Clickbait: 'Shocking!', 'Unexpectedly… Unbelievably…'
Pinned Top Comment
Immediately after posting, reply to yourself in the first comment with the technical details, IDs, complete timeline, and sources that were cut from the main body, and pin it.
Keep the main body in human-readable language; the comments section handles the professionalism. This way, you retain both types of readers.
Leave Hooks
Intentionally leave an 'incomplete' rather than 'incorrect' statement (e.g., don't give a specific number, don't state the exact quantity), so knowledgeable people come to the comments to fill it in.
Note: Leave 'gaps,' not 'errors.' Factual errors will be seen as disinformation; gaps just invite supplementation.
6. Step 5: Generate Images
See references/image-prompts.md and references/cover-design.md.
Number and Role Distribution
Default 3 images, max 5. 3 is the optimal range for 'informative but not verbose.'
| Image | Role | Content Type |
|---|---|---|
| 01 Cover | Get the click | Large text + strong visuals + person/prop |
| 02 Evidence | Prove it's real | Comparison, data, original facts |
| 03 Conclusion | Complete the story / give a reason to save | Plot timeline, follow-up, easter egg |
The most common mistake for Image 3: Writing it as a 'summary' or 'technical solution.'
If your content isn't aimed at peers, putting a technical list on Image 3 is wrong—the reader gets stuck on the last image, destroying all the emotion built up before. Image 3 should be the next step in the story (the parties' reactions, subsequent developments, absurd contrasts), not a knowledge point.
Three Hard Rules
- The image must be filled. Large text + person + props + scattered small elements, covering all four edges. Large areas of plain color background = cheap feel = low clicks.
- Text must be verifiable. Enclose Chinese text in quotation marks; compare word-for-word after generation; if even one character is wrong, regenerate.
- Explicitly state 'no other text besides this.' If you don't write this sentence, the model will fill in random English words.
Visual Consistency
- Uniform background color, font logic, and character style within the same set of images
- If there's an existing account character image, use it as reference image 1 to keep hairstyle, clothing, and style consistent
- Keep the character's position as consistent as possible (all in the bottom right or all in the bottom left), so the set looks like a series when scrolled
Technical Parameters
- Aspect ratio: 3:4 (Xiaohongshu vertical standard)
- Final image size: 1080 × 1440
- Key elements should be at least 5% from all edges (cover large text can go as close as 4%)
7. Step 6: Deliver
- Resize images to 1080×1440 (models often output 3584×4800 or 896×1200)
- Include a copy file: title, body, pinned top comment, tags, image division of labor, publishing settings, self-check list
- Include a preview image showing all 3 images side-by-side for easy evaluation
- Package into a zip file
8. Pre-Publishing Self-Check (10 seconds)
- Body text ≤ 220 characters?
- All technical terms translated into plain language?
- Blacklist words all removed?
- Title ≤ 15 characters and includes keywords?
- Cover large text and title don't repeat?
- Image 3 is a story, not a technical summary?
- Chinese text on all three images word-for-word verified?
- All three images are fully composed, with no large empty backgrounds?
- Used real names for famous people?
- Pinned top comment written?
- Fact-checking table can be matched to sources?
9. Reference Files
| File | Content |
|---|---|
references/content-sourcing.md | Post fetching, citation chain expansion, workarounds for blocked sites |
references/copywriting.md | Copywriting sentence templates, degradation word list, rewrites examples |
references/cover-design.md | Cover layout, text hierarchy, density rules |
references/image-prompts.md | Image generation prompt formulas, negative constraints, failure cases |
references/case-study.md | A complete real-world example: the full process of 3 iterations |
scripts/fetch-post.mjs | Fetch post, automatically expand citation chain |
scripts/imagen.mjs | Call image model for generation (supports reference images) |
scripts/assemble.py | Resize, stitch preview, package |