
Nby Xhs Cover
- 1 installs
- Updated April 6, 2026
- smartchainark/nby-skills
Generates Xiaohongshu-style vertical images (cover, content, summary pages) at 3:4 2K resolution using local Jimeng AI, four variants per run.
About
Generates Xiaohongshu-style vertical images in cover, content, and summary layouts at 3:4 2K resolution using the local Jimeng AI service. A developer uses it to produce RED-platform post visuals with four variants to choose from.
- Three page types (cover/content/summary) at 3:4 2K, four variants each
- Depends on nby-jimeng-api and the local jimeng Docker service
Nby Xhs Cover by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,200 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Jul 27, 2026 (Skillselion catalog sync)
npx skills add https://github.com/smartchainark/nby-skills --skill nby-xhs-coverAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | April 6, 2026 |
| Repository | smartchainark/nby-skills ↗ |
What it does
Generates Xiaohongshu-style vertical images (cover, content, summary pages) at 3:4 2K resolution using local Jimeng AI, four variants per run.
Files
nby-xhs-cover — 小红书配图生成器(即梦版)
基于即梦 AI 生成小红书风格竖版配图。提示词参考 freestylefly/xiaohongshu-cover-generator 的小红书设计规范,API 替换为本地即梦服务。
特性
- 3:4 竖版(小红书标准比例)
- 2K 分辨率
- 3 种页面类型:封面 / 内容 / 总结
- 每次生成 4 张变体供选择
- 免费(即梦本地 Docker 服务)
依赖
- nby-jimeng-api:
~/.nby-skills/nby-jimeng-api/.env中配置JIMENG_SESSION_ID - Docker:容器
jimeng-free-api-all运行在localhost:8000
使用
npx tsx scripts/handler.ts "<主题>" [封面|内容|总结]示例
# 封面图 — 大标题+拼图布局
npx tsx scripts/handler.ts "湖南芷江旅游攻略|龙津风雨桥、湘西米粉、智能酒店" "封面"
# 内容图 — 信息卡片+图标列表
npx tsx scripts/handler.ts "七项免费服务:接机接站、停车、洗衣、熨衣、行李寄存、女性用品" "内容"
# 总结图 — 勾选框+完成感
npx tsx scripts/handler.ts "芷江旅行总结:风雨桥✓ 米粉✓ 智能酒店✓" "总结"输出
文件保存到当前工作目录:
xiaohongshu-{类型}-{timestamp}-{序号}.png例:xiaohongshu-封面-1775466053022-1.png
三种页面类型的 Prompt 设计
| 类型 | 视觉特征 |
|---|---|
| 封面 | 大标题居中醒目,背景丰富有视觉焦点,多元素拼图布局 |
| 内容 | 信息层次分明,列表项+图标辅助,重点用颜色强调 |
| 总结 | 勾选框/完成标志,总结性文字突出,鼓励性视觉元素 |
通用规范:清新精致、适合年轻人审美、配色和谐、无水印无 logo、高清竖版。
故障排除
| 错误 | 原因 | 解决 |
|---|---|---|
connect ECONNREFUSED 127.0.0.1:8000 | 即梦 Docker 未运行 | docker start jimeng-free-api-all |
缺少 JIMENG_SESSION_ID | 未配置凭证 | 在 ~/.nby-skills/nby-jimeng-api/.env 中添加 |
credit prededuct failed | 即梦积分不足 | 切换账号或等待刷新(每日66免费积分) |
API Error 401 | Session ID 过期 | 重新登录即梦获取新 sessionid |
无效的页面类型 | 传入了不支持的类型 | 仅支持:封面、内容、总结 |
致谢
提示词设计参考 freestylefly/xiaohongshu-skills,感谢原作者的小红书风格规范总结。
{
"name": "nby-xhs-cover",
"version": "1.0.0",
"description": "小红书风格封面/内容/总结图生成器,基于即梦 API",
"type": "module",
"main": "scripts/handler.ts",
"scripts": {
"start": "tsx scripts/handler.ts"
},
"keywords": [
"xiaohongshu",
"小红书",
"cover",
"jimeng",
"即梦",
"image-generation"
],
"author": "smartchainark",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.0.0",
"tsx": "^4.0.0"
}
}
nby-xhs-cover
小红书风格配图生成器(即梦版)。生成 3:4 竖版封面/内容/总结图,每次 4 张变体。
快速开始
前置条件
1. Docker 运行即梦 API 服务:
docker run -it -d --init --name jimeng-free-api-all \
-p 8000:8000 -e TZ=Asia/Shanghai \
wwwzhouhui569/jimeng-free-api-all:latest2. 配置 Session ID(~/.nby-skills/nby-jimeng-api/.env):
JIMENG_SESSION_ID=你的即梦sessionid使用
cd nby-xhs-cover
npm install
npx tsx scripts/handler.ts "<主题>" [封面|内容|总结]示例
# 封面图
npx tsx scripts/handler.ts "湖南芷江旅游攻略" "封面"
# 内容图
npx tsx scripts/handler.ts "七项免费服务清单" "内容"
# 总结图
npx tsx scripts/handler.ts "旅行总结" "总结"输出
- 比例:3:4 竖版(小红书标准)
- 分辨率:2K
- 每次 4 张变体
- 文件名:
xiaohongshu-{类型}-{timestamp}-{序号}.png
三种页面类型
| 类型 | 视觉特征 |
|---|---|
| 封面 | 大标题居中,多元素拼图布局,有视觉冲击力 |
| 内容 | 信息卡片式,图标+列表,层次分明 |
| 总结 | 勾选框/完成标志,鼓励性元素 |
依赖
- nby-jimeng-api — 即梦 API 凭证管理
- Docker 容器
jimeng-free-api-all运行在localhost:8000
致谢
提示词设计参考 freestylefly/xiaohongshu-skills,API 替换为即梦本地服务。
License
MIT
import { request as httpsRequest } from "https";
import { request as httpRequest } from "http";
import { readFileSync, existsSync } from "fs";
import { join } from "path";
interface GenerationOptions {
topic: string;
pageType?: "封面" | "内容" | "总结";
referenceImage?: string; // COS URL for image-to-image
sessionId?: string;
}
interface JimengResponse {
created: number;
data: Array<{ url: string }>;
input_images?: string[];
composition_type?: string;
}
// 小红书风格提示词模板(保留原skill精华,适配即梦文生图)
const PROMPT_TEMPLATES = {
封面: (topic: string) =>
`小红书爆款封面图,${topic}。竖版3:4比例,大标题文字醒目居中,副标题在下方,清新精致有设计感,适合年轻人审美,配色温暖和谐,背景丰富有视觉焦点,文字清晰可读,排版美观留白合理,无水印无logo,高清画质,适合手机屏幕查看`,
内容: (topic: string) =>
`小红书图文内容页,${topic}。竖版3:4比例,信息层次分明,列表项清晰展示,重点内容用颜色强调,有小图标辅助说明,清新精致风格,配色和谐,文字清晰可读,无水印无logo,高清画质`,
总结: (topic: string) =>
`小红书总结收尾图,${topic}。竖版3:4比例,总结性文字突出,有勾选框或完成标志,给人完成感和满足感,鼓励性的视觉元素,清新精致风格,配色温暖,无水印无logo,高清画质`,
};
function loadSessionId(): string | undefined {
// 优先项目级 .env
const projectEnv = join(process.cwd(), ".nby-skills/nby-jimeng-api/.env");
const userEnv = join(
process.env.HOME || "",
".nby-skills/nby-jimeng-api/.env",
);
for (const envPath of [projectEnv, userEnv]) {
if (existsSync(envPath)) {
const content = readFileSync(envPath, "utf-8");
const match = content.match(/JIMENG_SESSION_ID=(.+)/);
if (match) return match[1].trim();
}
}
return process.env.JIMENG_SESSION_ID;
}
function callJimeng(
prompt: string,
sessionId: string,
referenceImage?: string,
): Promise<JimengResponse> {
return new Promise((resolve, reject) => {
const endpoint = referenceImage
? "/v1/images/compositions"
: "/v1/images/generations";
const body: Record<string, unknown> = {
model: "jimeng-4.6",
prompt,
ratio: "3:4", // 小红书标准竖版
resolution: "2k",
};
if (referenceImage) {
body.images = [referenceImage];
body.sample_strength = 0.7;
}
const data = JSON.stringify(body);
const req = httpRequest(
`http://localhost:8000${endpoint}`,
{
method: "POST",
headers: {
Authorization: `Bearer ${sessionId}`,
"Content-Type": "application/json",
},
},
(res) => {
let responseData = "";
res.on("data", (chunk) => {
responseData += chunk;
});
res.on("end", () => {
try {
const json = JSON.parse(responseData);
if (res.statusCode !== 200) {
reject(
new Error(
`Jimeng API Error (${res.statusCode}): ${JSON.stringify(json)}`,
),
);
return;
}
resolve(json);
} catch (e) {
reject(
new Error(
`Failed to parse Jimeng API response (status ${res.statusCode})`,
),
);
}
});
},
);
req.on("error", (error) => reject(error));
req.write(data);
req.end();
});
}
function downloadImage(url: string, maxRedirects = 5): Promise<Buffer> {
return new Promise((resolve, reject) => {
if (maxRedirects <= 0) {
reject(new Error("Too many redirects"));
return;
}
const client = url.startsWith("https") ? httpsRequest : httpRequest;
client(url, (res) => {
if (res.statusCode === 301 || res.statusCode === 302) {
downloadImage(res.headers.location!, maxRedirects - 1)
.then(resolve)
.catch(reject);
return;
}
const chunks: Buffer[] = [];
res.on("data", (chunk) => chunks.push(chunk));
res.on("end", () => resolve(Buffer.concat(chunks)));
res.on("error", reject);
})
.on("error", reject)
.end();
});
}
export async function generate(
options: GenerationOptions,
): Promise<{ images: Buffer[]; urls: string[] }> {
const { topic, pageType = "封面", referenceImage, sessionId } = options;
const sid = sessionId || loadSessionId();
if (!sid) {
throw new Error(
"缺少 JIMENG_SESSION_ID。请在 ~/.nby-skills/nby-jimeng-api/.env 中配置。",
);
}
const prompt = PROMPT_TEMPLATES[pageType](topic);
console.log(`🎨 生成${pageType}图: ${topic.slice(0, 50)}...`);
console.log(`📐 比例: 3:4 (小红书标准竖版)`);
const response = await callJimeng(prompt, sid, referenceImage);
if (!response.data || response.data.length === 0) {
throw new Error("即梦API未返回图片");
}
const urls = response.data.map((d) => d.url);
console.log(`✅ 生成了 ${urls.length} 张变体`);
// 下载所有变体
const images = await Promise.all(urls.map((url) => downloadImage(url)));
return { images, urls };
}
// 主函数
export async function main(args: string[]): Promise<void> {
const topic = args[0];
const validTypes = ["封面", "内容", "总结"] as const;
const rawType = args[1] || "封面";
if (!validTypes.includes(rawType as (typeof validTypes)[number])) {
console.error(`无效的页面类型: ${rawType}。支持: ${validTypes.join(", ")}`);
process.exit(1);
}
const pageType = rawType as "封面" | "内容" | "总结";
if (!topic) {
console.error('用法: npx tsx scripts/handler.ts "<主题>" [封面|内容|总结]');
console.error("");
console.error("示例:");
console.error(' npx tsx scripts/handler.ts "湖南芷江旅游攻略"');
console.error(' npx tsx scripts/handler.ts "张雪机车WSBK夺冠" "封面"');
console.error(' npx tsx scripts/handler.ts "七项免费服务清单" "内容"');
console.error("");
console.error(
"需要: ~/.nby-skills/nby-jimeng-api/.env 中配置 JIMENG_SESSION_ID",
);
console.error(
"需要: Docker 容器 jimeng-free-api-all 运行在 localhost:8000",
);
process.exit(1);
}
try {
const { images } = await generate({ topic, pageType });
const { writeFileSync } = await import("fs");
const timestamp = Date.now();
// 保存所有变体
images.forEach((buf, i) => {
const outputPath = join(
process.cwd(),
`xiaohongshu-${pageType}-${timestamp}-${i + 1}.png`,
);
writeFileSync(outputPath, buf);
console.log(`saved: ${outputPath}`);
});
console.log(`\n🎉 完成! 生成了 ${images.length} 张小红书${pageType}图`);
} catch (error) {
console.error("❌ 生成失败:");
if (error instanceof Error) {
console.error(error.message);
} else {
console.error(String(error));
}
process.exit(1);
}
}
if (import.meta.url === `file://${process.argv[1]}`) {
main(process.argv.slice(2)).catch(console.error);
}