Dreamifly 是一个基于 Next.js 与 ComfyUI API 的开源 AI 图像生成平台,支持文生图(Text-to-Image)和图生图(Image-to-Image),无需注册,专为开发者与创意者打造。
Dreamifly 是一个轻量级、高性能的 AI 绘画网站模板,集成多种先进 AI 模型(如 HiDream-I1、Flux.1-Dev、Stable Diffusion 3.5、Qwen-Image 等),通过调用 ComfyUI 后端 API 实现快速入门的图像生成。项目采用现代 Web 技术栈构建,开箱即用,适合快速部署个人 AI 创作平台或作为二次开发模板。
目前官方站已经日均访问量已达3K+, 感谢大家对Dreamifly的热爱~
| 特性 | 说明 |
|---|---|
| 🧠 多模型支持 | 支持 8 种主流 AI 模型,包括 HiDream、Flux、Stable Diffusion、Qwen 等 |
| 🔐 无需登录 | 完全匿名使用,保护用户隐私 |
| 💬 智能提示词优化 | 自动将中文提示词转换为英文(基于LLM OpenAI API),提升生成效果 |
| 🖼️ 图生图功能 | 支持单图和多图输入,进行风格迁移与图像编辑 |
| 🎭 风格转换 | 内置多种艺术风格,一键应用 |
| 📊 数据统计 | 统计每日生成次数,支持数据库存储 |
| 🌍 多语言支持 | 内置中英文界面,支持国际化 |
所有图像均由 Dreamify 平台 AI 模型生成,用户拥有完整使用权。
- 框架: Next.js 15.2.4 (App Router)
- UI 库: Tailwind CSS + Headless UI
- 状态管理: React Hooks + Context
- 图像加载:
next/image自动优化 - 国际化: next-intl 支持(中/英/繁中)
- 表单处理: React Hook Form
- ComfyUI API库: ComfyUI API
- 数据库: PostgreSQL + Drizzle ORM
- 文件上传: 本地文件系统存储
- API 路由: Next.js API Routes
- HiDream-full-fp8(北京智象未来科技,中文优化)
- Flux-Dev(Black Forest Lab 开源)
- Stable-Diffusion-3.5(Stability AI)
- Flux-Kontext(12B 参数图像编辑模型)
- Flux-Krea(高质量图像生成)
- Qwen-Image(阿里云通义千问,中文支持)
- Qwen-Image-Edit (2509)(图像编辑专用)
- Wai-SDXL-V150(动漫风格特化)
- 本地开发
- Docker 容器化
- Vercel / Netlify 静态托管(前端)
- 自建 ComfyUI 服务(后端)
git clone https://github.com/LastLighter/Dreamifly.git
cd Dreamiflynpm install
# 或使用 yarn
yarn install创建 .env 文件:
# 数据库配置
DATABASE_URL='postgresql://username:password@localhost:5432/dreamify'
# ComfyUI API 端点(无需设置所有模型, 仅配置需要的模型。如果特定环境变量完全不配置, 页面即不会展示相应模型)
HiDream_Fp8_URL='https://your-hidream-api.com'
Flux_Krea_URL='https://your-flux-krea-api.com'
Stable_Diffusion_3_5_URL='https://your-sd35-api.com'
Qwen_Image_URL='https://your-qwen-api.com'
Qwen_Image_Edit_URL='https://your-qwen-edit-api.com'
Kontext_fp8_URL='https://your-kontext-api.com'
Wai_SDXL_V150_URL='https://your-wai-sdxl-api.com'
# LLM API 配置(用于提示词优化)
# 新的提示词优化专用环境变量(推荐)
PROMPT_OPTIMIZATION_BASE_URL='https://your-llm-api.com/v1'
PROMPT_OPTIMIZATION_API_KEY='your-api-key'
PROMPT_OPTIMIZATION_MODEL='Qwen/Qwen3-VL-8B-Instruct-FP8'
PROMPT_OPTIMIZATION_MAX_TOKENS=2000
# 旧的环境变量(向后兼容,如果未设置新变量则使用)
OPEN_AI_API='https://your-llm-api.com/v1'
MAX_TOKENS=2000
# 应用配置
NEXT_PUBLIC_BASE_URL='http://localhost:3000'
# 网站版本号
NEXT_PUBLIC_WEB_VERSION=1.0.0
# 社区内容访问控制(默认为 false,只对管理员开放)
# 设置为 true 时,社区内容对所有用户开放
# 设置为 false 时,社区内容只对管理员开放
COMMUNITY_IMAGES_PUBLIC=false
# 社区举报功能配置
# NSFW 举报阈值:普通用户(非管理员/优质用户)举报次数达到此值后,图片将被标记为 NSFW
# 管理员和优质用户拥有一票举报权,举报后直接标记为 NSFW(不计入此阈值)
NSFW_REPORT_THRESHOLD=3
# 阿里云 OSS(对象存储服务)的访问密钥 ID
OSS_AK=xxx
# 阿里云 OSS 的访问密钥 Secret(密钥)
OSS_SK=xxx
# OSS 存储桶(Bucket)名称
OSS_BUCKET=xxx
# OSS 访问的 Endpoint(访问域名或节点地址)
OSS_ENDPOINT=https://xxx.xxx.com
# 头像审核 API 配置(可选)
AVATAR_MODERATION_BASE_URL='https://your-moderation-api.com/v1'
AVATAR_MODERATION_API_KEY='your-api-key'
AVATAR_MODERATION_MODEL='Qwen/Qwen3-VL-8B-Instruct-FP8'
AVATAR_MODERATION_PROMPT='请判断图片的内容与文字是否可以在公共场所展示,评判标准包括但不限于不应该包含"黄色"、"血腥"、"过于夸张的暴力场景",你只需输出是或者否即可'🔐 重要提示:
- 每个模型需要独立的 ComfyUI API 端点(当然如果算力能支持, 也可以用一个服务)
- API 地址需支持 CORS 且开放
/prompt接口- 至少配置一个模型 URL 即可开始使用
- 提示词优化:优先使用
PROMPT_OPTIMIZATION_*环境变量,如果未设置则回退到OPEN_AI_API(向后兼容)- 头像审核:如果未配置
AVATAR_MODERATION_BASE_URL,则跳过头像审核直接上传
# 运行数据库迁移
npx drizzle-kit pushnpm run dev访问:http://localhost:3000
在项目根目录创建 Dockerfile:
# 使用官方 Node.js 21 Alpine 镜像
FROM node:21-alpine AS base
# 设置工作目录
WORKDIR /app
# 构建阶段
FROM base AS builder
# 复制配置文件(这些文件变化较少,利于缓存)
COPY next.config.js ./
COPY tailwind.config.js ./
COPY postcss.config.js ./
COPY postcss.config.mjs ./
COPY tsconfig.json ./
COPY drizzle.config.json ./
# 复制源代码和必要的文件
COPY package.json package-lock.json ./
COPY public ./public
COPY src ./src
COPY drizzle ./drizzle
COPY middleware.ts ./
COPY eslint.config.mjs ./
RUN npm install
# 构建应用
RUN npm run build
# 生产运行阶段
FROM base AS runner
# 安装必要的系统工具
RUN apk add --no-cache curl
# 创建非 root 用户
RUN addgroup -g 1001 -S nodejs && \
adduser -S nextjs -u 1001
# 复制构建结果
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json
# 复制必要的配置文件
COPY --from=builder --chown=nextjs:nodejs /app/next.config.js ./
COPY --from=builder --chown=nextjs:nodejs /app/middleware.ts ./
# 设置权限
RUN chown -R nextjs:nodejs /app
# 切换到非 root 用户
USER nextjs
# 暴露端口
EXPOSE 3000
# 设置环境变量
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
# 启动应用
CMD ["npm", "start"]# 构建镜像
docker build -t dreamify:latest .
# 运行容器
docker run -d \
--name dreamifly \
-p 3000:3000 \
-e DATABASE_URL="postgresql://username:password@host:port/database" \
-e HiDream_Fp8_URL="https://your-api.com" \
-e Flux_Krea_URL="https://your-api.com" \
-e NEXT_PUBLIC_BASE_URL="https://your-domain.com" \
dreamify:latest创建 docker-compose.yml:
version: '3.8'
services:
dreamify:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/dreamifly
- HiDream_Fp8_URL=https://your-hidream-api.com
- Flux_Krea_URL=https://your-flux-krea-api.com
- NEXT_PUBLIC_BASE_URL=https://your-domain.com
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15
environment:
- POSTGRES_DB=dreamify
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:启动服务:
docker-compose up -dDreamify/
├── src/
│ ├── app/
│ │ ├── [locale]/ # 国际化路由
│ │ │ ├── layout.tsx # 本地化布局
│ │ │ ├── page.tsx # 主页
│ │ │ ├── HomeClient.tsx # 主页客户端组件
│ │ │ └── communityWorks.ts # 社区作品数据
│ │ ├── api/ # API 路由
│ │ │ ├── generate/route.ts # 图像生成 API
│ │ │ ├── models/route.ts # 模型列表 API
│ │ │ ├── upload/route.ts # 文件上传 API
│ │ │ ├── optimize-prompt/route.ts # 提示词优化 API
│ │ │ └── stats/route.ts # 统计数据 API
│ │ ├── layout.tsx # 根布局
│ │ ├── page.tsx # 根页面
│ │ └── globals.css # 全局样式
│ ├── components/ # 可复用组件
│ │ ├── GenerateForm.tsx # 生成表单
│ │ ├── GeneratePreview.tsx # 预览组件
│ │ ├── GenerateSection.tsx # 生成区域
│ │ ├── PromptInput.tsx # 提示词输入
│ │ ├── StyleTransferForm.tsx # 风格转换表单
│ │ ├── TabNavigation.tsx # 标签导航
│ │ ├── SiteStats.tsx # 站点统计
│ │ └── ...
│ ├── db/ # 数据库相关
│ │ ├── index.ts # 数据库连接
│ │ └── schema.ts # 数据模型
│ ├── hooks/ # 自定义 Hooks
│ │ └── useNavWidth.ts # 导航宽度 Hook
│ ├── utils/ # 工具函数
│ │ ├── comfyApi.ts # ComfyUI API 客户端
│ │ ├── modelConfig.ts # 模型配置
│ │ ├── promptOptimizer.ts # 提示词优化
│ │ ├── t2iworkflow.ts # 文生图工作流
│ │ ├── i2iworkflow.ts # 图生图工作流
│ │ └── locale.ts # 本地化工具
│ ├── messages/ # 国际化语言包
│ │ ├── en.json # 英文
│ │ ├── zh.json # 中文
│ │ └── zh-TW.json # 繁体中文
│ ├── config.ts # 配置文件
│ └── i18n.ts # 国际化配置
├── drizzle/ # 数据库迁移文件
├── public/ # 静态资源
├── scripts/ # 脚本文件
├── .env.example # 环境变量示例
├── drizzle.config.json # Drizzle 配置
├── next.config.js # Next.js 配置
├── package.json # 项目依赖
└── README.md # 项目文档Frontend (Next.js)
↓ POST /api/generate
→ 读取环境变量中的模型 URL
→ 根据模型类型选择对应工作流
→ 构造 ComfyUI 标准 Prompt JSON
→ 调用 ComfyUI /prompt 接口
← 返回生成图像 Base64 数据
→ 前端展示结果
prompt: 提示词(支持中文自动优化)negative_prompt: 负面提示词width,height: 图像尺寸(64-1920px)steps: 生成步数(5-40)model: 模型选择images: 参考图像数组(图生图)denoise: 去噪强度(0-1)batch_size: 批量生成数量(1-4)
A: 不需要。Dreamify 支持匿名使用,无需登录,因而也可以较为方便地本地部署使用。
A: 当前支持 8 种模型:
- HiDream-full-fp8(国产高性能模型,中文优化)
- Flux-Dev(Black Forest Lab,支持文生图和图生图)
- Stable-Diffusion-3.5(Stability AI)
- Flux-Kontext(图像编辑,支持多图输入)
- Flux-Krea(高质量图像生成)
- Qwen-Image(阿里云通义千问,中文支持)
- Qwen-Image-Edit(图像编辑专用)
- Wai-SDXL-V150(动漫风格特化)
A: 支持!系统会自动检测中文提示词并使用 LLM 服务将其优化为英文,提升生成效果。HiDream 和 Qwen 模型对中文有良好支持。
A: 在 .env 文件中为每个模型配置对应的 API URL。至少配置一个模型即可开始使用,系统会自动检测可用的模型。
A: 支持!可以上传 1-2 张参考图像,系统会根据选择的模型自动切换到图生图模式。
我们欢迎任何形式的贡献!
- 🐞 提交 Issue:报告 Bug 或提出功能建议
- 🌟 提交 PR:修复问题、优化 UI、增加新功能
- 📚 文档改进:帮助完善 README 或多语言支持
- 🔗 生态共建:开发插件、Workflow、模型包
项目灵感来源于 FluxEz,也欢迎star该项目~
MIT License | © 2025 Dreamify Project
我们与以下优秀 AI 工具平台合作,共同推动 AI 艺术生态发展:
- AnyComfy
一个免费、无限使用的在线 ComfyUI 平台,轻松运行任意 AI 绘画工作流。
💡 让 AI 绘画变得简单,释放你的无限创意。
Built with ❤️ by LastLight



