本项目基于 ThinkPHP 5.0.24 构建,整合了 Midjourney API 的图像生成、放大、变换、Describe 等能力,并提供异步回调与数据库任务管理。
- ✨ 图像生成功能:输入 Prompt 一键提交任务。
- 🔁 放大 / 变换:针对已有任务执行 Upscale 与 Variation。
- 🖼️ Describe 支持:通过图片链接生成文本描述。
- 📡 异步回调:实现
/api/task/callback回调接口,自动更新任务状态与图片链接。 - 📊 任务看板:使用 Axios 实时刷新任务列表,查看进度、失败原因等。
- 💾 数据库持久化:内置
mj_tasks表结构与 Phinx 迁移脚本,默认支持 SQLite。 - 🧩 参数可视化配置:在控制台中勾选/选择常见的
--ar、--v、--q、--style、--tile等 Midjourney 参数,自动生成options载荷。 - 🖼️ 垫图上传:支持本地图片上传或远程 URL 粘贴,生成可公网访问的
--url链接随任务提交。
-
安装依赖
composer install
-
复制环境变量模板并填写
cp .env.example .env
请在
.env中配置:midjourney.token:Midjourney API Token;midjourney.callback_url:公网可访问的回调地址(例如https://your-domain.com/api/task/callback)。该地址会在提交任务时一并发送给 Midjourney,由其服务器在任务状态变化时回调;- 若需要,可设置
database.database指向 MySQL 或 SQLite 文件。
-
执行数据库迁移(需安装
topthink/think-migration插件)php think migrate:run
-
启动内置开发服务器
php think run
访问
http://127.0.0.1:8000即可使用可视化控制台。
- 快捷参数选项:高级面板提供
--ar(比例)、--v(版本)、--q(质量)、--style、--stylize、--chaos、--seed、--stop、--weird、--iw、--tile、--turbo、--niji、--fast、--relax、--uplight、--upbeta等常见开关,选择后会自动填充到请求的options中,可与自定义 JSON 参数合并。 - 自定义 JSON:仍可在文本框中写入任意合法 JSON 对象(如
{"sameseed":123})覆盖或补充高级选项,便于快速迭代实验参数。 - 垫图上传/管理:
垫图 / 图片参考 (-url)区域支持拖入本地图片并调用/api/task/upload接口上传至public/uploads/,也可粘贴远程图片 URL。列表中的链接会作为image_urls随任务发送(最多 6 张),首个地址同时作为image_url。 - 提醒:请确保部署环境允许公网访问
public/uploads/目录,以便 Midjourney 服务能够获取上传的垫图资源。
php think run访问 http://127.0.0.1:8000 即可使用可视化控制台。
├── application
│ ├── api
│ │ └── controller
│ │ └── Midjourney.php # API 控制器,封装任务提交、回调、查询
│ ├── common
│ │ ├── model
│ │ │ └── MjTask.php # 数据模型
│ │ ├── service
│ │ │ └── MidjourneyClient.php # 调用 Midjourney API 的封装
│ │ └── validate
│ │ └── MjTaskValidate.php # 表单校验
│ ├── index
│ │ ├── controller
│ │ │ └── Index.php # 可视化页面
│ │ └── view
│ │ └── index
│ │ └── index.html # 前端页面模板
│ ├── config.php # 全局配置
│ ├── database.php # 数据库配置
│ ├── route.php # 路由定义
│ └── extra
│ └── midjourney.php # Midjourney 配置
├── database
│ └── migrations
│ └── 20240101000000_create_mj_tasks_table.php
├── public
│ ├── index.php # 入口文件
│ └── static
│ ├── css/app.css
│ └── js/app.js
└── composer.json
├── application │ ├── api │ │ └── controller │ │ └── Midjourney.php # API 控制器,封装任务提交、回调、查询 │ ├── common │ │ ├── model │ │ │ └── MjTask.php # 数据模型 │ │ ├── service │ │ │ └── MidjourneyClient.php # 调用 Midjourney API 的封装 │ │ └── validate │ │ └── MjTaskValidate.php # 表单校验 │ ├── index │ │ ├── controller │ │ │ └── Index.php # 可视化页面 │ │ └── view │ │ └── index │ │ └── index.html # 前端页面模板 │ ├── config.php # 全局配置 │ ├── database.php # 数据库配置 │ ├── route.php # 路由定义 │ └── extra │ └── midjourney.php # Midjourney 配置 ├── database │ └── migrations │ └── 20240101000000_create_mj_tasks_table.php ├── public │ ├── index.php # 入口文件 │ └── static │ ├── css/app.css │ └── js/app.js └── composer.json
## 回调示例
## 回调示例
Midjourney 平台会在任务状态变化时向 `/api/task/callback` 发送 POST 请求。示例载荷:
```json
{
"taskId": "93c9d820-f3f4-4d8a-b2f2-xxxx",
"status": "SUCCESS",
"progress": "100%",
"imageUrl": "https://cdn.mjapiapp.com/.../image.png",
"failReason": null
}
控制器会根据 taskId 自动更新 mj_tasks 表中的状态、进度、图片地址及元数据。
- 若部署在公网服务器,请确保
public/目录作为 Web Server 根目录。 - 若需要使用 MySQL,请将
database.php中type改为mysql,并在.env中补充连接信息。 - 建议结合 Redis 队列实现更复杂的任务状态轮询,可扩展
MidjourneyClient::fetchTask方法。
欢迎根据业务需求继续扩展,如加入用户体系、任务权限控制、Webhook 签名校验等能力。