long_stable_diffusion
用GPT-3和Stable Diffusion为长篇故事自动生成系列配图的AI流水线工具,输出图文并茂的Word文档
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用GPT-3和Stable Diffusion为长篇故事自动生成系列配图的AI流水线工具,输出图文并茂的Word文档
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Long Stable Diffusion 是一个"让AI写故事、给故事配图"的自动化流水线:输入长篇文本,GPT-3 生成场景插图提示词,Stable Diffusion 将提示词转化为配图,最终输出图文并茂的 Word 文档。
2022年,Stable Diffusion 席卷 AI 圈,所有人都知道:给它一个 prompt,它就能生成一张图。但现实世界的需求往往更贪婪——如果我想给一篇 2000 字的故事配 10 张插图呢?
这不是一个 prompt 能搞定的事。作者 Sharon Zhou(GitHub: @sharonzhou)敏锐地捕捉到了这个 Gap。作为 AI 播客 Stories by AI 的运营者,她每周都要为 AI 生成的故事配图,手动操作太慢,于是花了两个周末写出了这个项目。

图1:Stories by AI 播客中使用该项目生成的插图示例。 展示了一只山羊在庄园里悠闲吃草的场景,Stable Diffusion 在"prompt-English"风格指令下生成的质量相当细腻。
这个项目最初只是一个周末 hackathon 的自娱自乐,用来奖励自己"过去几个月辛苦工作",顺便把闲置的两块 Titan RTX 显卡用起来。 —— Sharon Zhou
项目的工作流设计非常清晰,每个步骤对应一个独立模块:
Step 1:输入长文本
用户将待配图的故事文本放入 texts/ 目录,格式为 .txt。程序支持批量处理多个文件。
Step 2:GPT-3 生成插图创意 有两种策略:
def generate_image_prompts_with_sections(text):
suffix_template = "\n\nRecommend five different detailed, logo-free, sign-free images to accompany the previous text that illustrate the {} of this text: 1)"
# 调用 OpenAI API (model: text-davinci-002)
response = requests.post(
"https://api.openai.com/v1/completions",
json={
"model": "text-davinci-002",
"prompt": prompt,
"max_tokens": 150,
"temperature": 0.8,
}
)
Step 3:"翻译"成 Prompt-English
这是整个项目最精妙的设计——GPT-3 生成的描述是"人话",但直接喂给 Stable Diffusion 效果不佳。程序将"人话"通过 Few-shot Prompt 模板翻译为"prompt-English":在原始描述后追加艺术风格指令(如 trending on art station, Greg Rutkowski, volumetric lighting)。
Few-shot 示例文件
effective_prompts_fs.txt包含 36 个高质量 prompt 对,教会 GPT-3 如何把"一只猫在雨中行走"翻译成"一只猫在雨中行走的电影感概念艺术插图,作者 Greg Rutkowski,artstation 热门风格"。
Step 4:Stable Diffusion 生成图像
将翻译后的 prompt 喂给 CompVis/stable-diffusion-v1-4,支持多 GPU 并行加速。
# stable_diffusion.py
from diffusers import StableDiffusionPipeline
def load_model():
pipe = StableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
revision="fp16",
torch_dtype=torch.float16,
use_auth_token=True
)
return pipe.to("cuda")
# 支持自定义图像尺寸(默认 512×768)
image = pipe(prompt, height=IMAGE_HEIGHT, width=IMAGE_WIDTH)["sample"][0]
Step 5:输出为 Word 文档
用 python-docx 将所有图像和对应的 prompt 说明打包为一个 .docx 文件,便于直接使用。

图2:三只小猪故事的插图生成成果。 可以看到开头场景(稻草屋)、中段场景(猪小弟躲砖房)和结尾场景(狼掉进锅里)各有配图。
| 文件 | 职责 |
|---|---|
run_two_gpus.sh | 入口脚本,双 GPU 并行调度 |
run.py | 核心引擎:GPT-3 调用、NLTK 分句、prompt 工程、SD 调用 |
stable_diffusion.py | SD 独立推理模块(可单独使用) |
dump_docx.py | Word 文档打包(可单独使用) |
clean_lexica.py | Lexica prompt 数据清洗(预处理工具) |
run_two_gpus.sh 使用 CUDA_VISIBLE_DEVICES 分别在两个 GPU 上启动独立的 Python 进程:
CUDA_VISIBLE_DEVICES=1 python run.py "$@" &
CUDA_VISIBLE_DEVICES=0 python run.py "$@" && fg
run.py 内部使用 torch.multiprocessing.Pool 做进程池加速,支持每个 GPU 跑 2-3 个并发进程,充分利用显存。
核心依赖(requirements.txt):
diffusers==0.2.4:HuggingFace 扩散模型库torch==1.11.0:深度学习框架transformers:HuggingFace 通用 NLP 库(间接依赖)nltk==3.7:自然语言处理(句子分词)requests==2.28.1:HTTP 调用(OpenAI API)python-docx==0.8.11:Word 文档生成pandas==1.4.4:数据处理(Lexica prompt 清洗)第三方服务依赖:
text-davinci-002)CompVis/stable-diffusion-v1-4 的访问权限)StableDiffusionPipeline,必须使用 NVIDIA GPU 且显存 ≥12GB(官方推荐 24GB RTX 系列)CompVis/stable-diffusion-v1-4 模型需要额外申请访问权限(不是所有 HuggingFace 账号都有)nltk.download('punkt') 下载分词数据run_two_gpus.sh 中的 CUDA_VISIBLE_DEVICES 变量# 1. 安装依赖
pip install -r requirements.txt
python -c "import nltk; nltk.download('punkt')"
# 2. 配置环境变量
export OPENAI_TOKEN=sk-xxx
huggingface-cli login # 登录 HuggingFace
# 3. 运行(默认 sections 方法)
bash run.sh -f three_little_pigs
# 4. 自定义(extracts 方法 + 3进程/GPU)
bash run_two_gpus.sh -f my_story -m extracts -n 3
生成产物:
image_prompts/my_story_sections.json:GPT-3 生成的插图提示词images/my-story/:所有生成的 PNG 图片docx/My Story - Illustrations - {timestamp}.docx:最终交付物stable_diffusion.py 和 dump_docx.py 均支持单独调用,方便二次开发Long Stable Diffusion 是一个垂直场景的端到端 AI 流水线工具,解决的是"长文本 → 多图"这个细分但真实的需求。作者 Sharon Zhou 将 GPT-3 的语义理解能力和 Stable Diffusion 的图像生成能力巧妙串联,加上 few-shot prompt engineering 的"翻译层",实现了比单独使用任一模型更好的效果。
适合人群:AI 播客运营者、插画师、内容创作者、数据科学研究者(作为 pipeline 架构参考)。
不适合:无 GPU 的用户、追求"一键部署"的爱好者、期望现代 SD 质量的普通用户。
GitHub 仓库已有 687 star,fork 54 次,说明这个垂直场景的需求确实存在且有共鸣。