搭建 Stable Diffusion 图像生成系统并通过 Ngrok 暴露到公网(实现本地系统网络访问)——项目记录
目录
📚 背景与需求
📝 需求明确
🔑 核心功能
🌍 网络优化
🛠️ 方案确认
⚙️ 技术栈
📈 实现流程(Flask端口+Ngrok注册authtoken)
🎯 优化目标
🔍 实现细节
1. 迁移到 Flask
2. 持久化提示词
3. 图像下载功能
4. 配置 ngrok
🛠️ 优化过程
📊 最终效果编辑
📝 总结
📚 背景与需求
随着 AI 图像生成 技术的快速进步,Stable Diffusion 已成为热门工具。本项目的目标是将基于 PyQt5 的本地图像生成系统迁移为 Flask 网页应用,并通过 ngrok 暴露到公网,实现远程访问和图像下载功能。
原效果:
网页效果展示(可下载另存为、并通过网页展示):
手机端访问、下载效果展示
📝 需求明确
-
系统迁移:将 PyQt5 GUI 迁移到 Flask 网页应用。
-
公网访问:通过 ngrok 实现公网 URL 访问。
🔑 核心功能
-
输入提示词生成图像:支持 Stable Diffusion 以及 img2img 生成模式。
-
调整推理步数和优化强度:提供自定义生成参数。
-
持久化历史提示词:使用 JSON 文件 保存历史生成记录。
-
支持图像查看、删除和下载:方便用户管理生成的图像。
🌍 网络优化
-
确保网络环境下 URL 稳定:采用 ngrok 或 NATAPP 优化访问稳定性。
🛠️ 方案确认
⚙️ 技术栈
-
后端:Flask (Python)
-
前端:HTML + CSS
-
模型:Stable Diffusion v1.5
-
内网穿透:ngrok(备用 NATAPP)
📈 实现流程(Flask端口+Ngrok注册authtoken)
-
从 PyQt5 提取图像生成逻辑,迁移到 Flask:实现图像生成的 Web 接口。
端口很重要,这里随机设置为5000
Flask安装完成:
-
用 JSON 文件保存历史提示词:避免每次启动时丢失历史记录。
-
添加图像下载功能:允许用户下载生成的图像。
生成过程仍需保持科学上网,否则报错
-
配置 ngrok 暴露服务:通过公网 URL 进行访问。首先安装ngrok,注册,
Download ngrok下载解压后会有一个ngrok.exe应用程序,cd D:\应用\app\ngrok-v3-stable-windows-amd64
ngrok.exe http 5000
随后在注册界面,复制下面命令并在cmd界面输入
复制这段ID,在ngrok运行,链接成功则会出现显眼的online字样,下面的forwarding就是可供他人访问的网址
输入命令,他人可通过网址访问,由于是免费版,每次地址域名不一致且时间有限
🎯 优化目标
-
修复“未知提示词”显示问题:确保历史提示词能够正确加载。
-
支持推理参数调整:允许用户自定义生成过程的步数和优化强度。
-
确保下载功能在公网可用:测试并确认公网环境下的图像下载流畅。
🔍 实现细节
1. 迁移到 Flask
-
PyQt5 分析:提取图像生成逻辑和历史管理部分。
-
Flask 设计:
-
创建
app.py
,定义路由处理提示词输入和图像生成。 -
使用
render_template_string
渲染 HTML 界面。
-
-
模型加载:
-
全局加载 Stable Diffusion 模型,避免每次请求时重新初始化。
-
2. 持久化提示词
-
问题:重启后提示词显示为“未知提示词”。
-
解决方案:
-
使用
history.json
文件保存历史数据。 -
每次生成或删除图像时更新 JSON 文件。
-
启动时从 JSON 文件加载历史记录。
-
3. 图像下载功能
-
实现:
-
添加
/download/<filename>
路由,使用send_file(as_attachment=True)
进行文件发送。 -
在 HTML 中为历史记录添加下载链接。
-
-
验证:
-
通过 ngrok 提供的公网 URL 测试图像下载功能。
-
4. 配置 ngrok
-
步骤:
-
注册 ngrok,获取
authtoken
。 -
运行
ngrok config add-authtoken <token>
。 -
启动 Flask 后,运行
ngrok http 5000
,获取公网 URL。
-
-
网络优化:
-
在中国环境下,使用 VPN 或 NATAPP 确保网络稳定性。
-
🛠️ 优化过程
-
提示词持久化:通过 JSON 文件解决“未知提示词”问题,保证每次启动时历史提示词正确显示。
-
下载功能:从仅能查看图像升级为支持图像下载。
-
网络稳定性:若 ngrok 不稳定时,及时切换为 NATAPP。
📊 最终效果

-
本地访问:
http://localhost:5000
功能完整,图像生成和管理顺畅。 -
公网访问:通过 ngrok 生成的 URL,支持图像生成、查看、删除和下载。
-
-
用户体验:提示词正常显示,下载功能流畅,满足用户需求。
📝 总结
本项目成功将原本基于 PyQt5 的图像生成系统迁移为 Flask Web 应用,并通过 ngrok 实现公网访问。通过优化提示词持久化机制和图像下载功能,进一步提升了用户体验。未来可以考虑扩展更多功能,如图像上传和更复杂的生成模式。
以前的扩散项目:
深度学习项目记录·Stable Diffusion从零搭建、复现笔记-CSDN博客
SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记-CSDN博客
这篇系统基于Pyqt实现。
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客