diff --git a/change/@acedatacloud-nexior-f9339c7d-e331-406b-ac53-c014909a07dd.json b/change/@acedatacloud-nexior-f9339c7d-e331-406b-ac53-c014909a07dd.json new file mode 100644 index 00000000..9f9caa4d --- /dev/null +++ b/change/@acedatacloud-nexior-f9339c7d-e331-406b-ac53-c014909a07dd.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "add flux", + "packageName": "@acedatacloud/nexior", + "email": "1348977728@qq.com", + "dependentChangeType": "patch" +} diff --git a/src/components/common/ImageNavigator.vue b/src/components/common/ImageNavigator.vue new file mode 100644 index 00000000..3e1be462 --- /dev/null +++ b/src/components/common/ImageNavigator.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/components/flux/ConfigPanel.vue b/src/components/flux/ConfigPanel.vue new file mode 100644 index 00000000..9c1deb84 --- /dev/null +++ b/src/components/flux/ConfigPanel.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/flux/DetailPanel.vue b/src/components/flux/DetailPanel.vue new file mode 100644 index 00000000..fae99a5f --- /dev/null +++ b/src/components/flux/DetailPanel.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/flux/ImageGallery.vue b/src/components/flux/ImageGallery.vue new file mode 100644 index 00000000..7d517157 --- /dev/null +++ b/src/components/flux/ImageGallery.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/components/flux/OperationPanel.vue b/src/components/flux/OperationPanel.vue new file mode 100644 index 00000000..1fc30af7 --- /dev/null +++ b/src/components/flux/OperationPanel.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/flux/RecentPanel.vue b/src/components/flux/RecentPanel.vue new file mode 100644 index 00000000..afe05120 --- /dev/null +++ b/src/components/flux/RecentPanel.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/components/flux/VideoPlayer.vue b/src/components/flux/VideoPlayer.vue new file mode 100644 index 00000000..46a73a6a --- /dev/null +++ b/src/components/flux/VideoPlayer.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/flux/config/EffectSelector.vue b/src/components/flux/config/EffectSelector.vue new file mode 100644 index 00000000..4df318e9 --- /dev/null +++ b/src/components/flux/config/EffectSelector.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/components/flux/config/ModelSelector.vue b/src/components/flux/config/ModelSelector.vue new file mode 100644 index 00000000..95a30aa7 --- /dev/null +++ b/src/components/flux/config/ModelSelector.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/components/flux/config/NumbersSelector.vue b/src/components/flux/config/NumbersSelector.vue new file mode 100644 index 00000000..943b29bd --- /dev/null +++ b/src/components/flux/config/NumbersSelector.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/components/flux/config/PromptInput.vue b/src/components/flux/config/PromptInput.vue new file mode 100644 index 00000000..99303b3d --- /dev/null +++ b/src/components/flux/config/PromptInput.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/components/flux/config/QualitySelector.vue b/src/components/flux/config/QualitySelector.vue new file mode 100644 index 00000000..7f4fe2c5 --- /dev/null +++ b/src/components/flux/config/QualitySelector.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/components/flux/config/RatioSelector.vue b/src/components/flux/config/RatioSelector.vue new file mode 100644 index 00000000..7cb60806 --- /dev/null +++ b/src/components/flux/config/RatioSelector.vue @@ -0,0 +1,168 @@ + + + + diff --git a/src/components/flux/task/Preview.vue b/src/components/flux/task/Preview.vue new file mode 100644 index 00000000..573d22e3 --- /dev/null +++ b/src/components/flux/task/Preview.vue @@ -0,0 +1,306 @@ + + + + + + + diff --git a/src/constants/flux.ts b/src/constants/flux.ts new file mode 100644 index 00000000..fd948ada --- /dev/null +++ b/src/constants/flux.ts @@ -0,0 +1,6 @@ +export const FLUX_SERVICE_ID = 'e8ebe055-429a-48e9-9d34-5089eae5fd89'; + +export const FLUX_DEFAULT_MODEL = 'flux'; +export const FLUX_DEFAULT_ASPECT_RATIO = '1:1'; +export const FLUX_DEFAULT_NUMBERS = 1; +export const FLUX_DEFAULT_QUALITY = 80; diff --git a/src/constants/index.ts b/src/constants/index.ts index 139489de..2a2bb562 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -7,6 +7,7 @@ export * from './midjourney'; export * from './qrart'; export * from './luma'; export * from './pika'; +export * from './flux'; export * from './hailuo'; export * from './headshots'; export * from './suno'; diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 7dd35952..44502bec 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -73,6 +73,7 @@ export const loadLocaleMessages = async (i18n: I18n, locale: string) => { 'qrart', 'luma', 'pika', + 'flux', 'hailuo', 'headshots', 'suno', diff --git a/src/i18n/zh-CN/common.json b/src/i18n/zh-CN/common.json index a5748f1a..b24bc370 100644 --- a/src/i18n/zh-CN/common.json +++ b/src/i18n/zh-CN/common.json @@ -311,6 +311,10 @@ "message": "Suno", "description": "网站导航栏中的文本,用于显示Suno页面,请不要翻译此字段,必须保持为'Suno'" }, + "nav.flux": { + "message": "Flux", + "description": "网站导航栏中的文本,用于显示Flux页面,请不要翻译此字段,必须保持为'Flux'" + }, "nav.luma": { "message": "Luma", "description": "网站导航栏中的文本,用于显示Luma页面,请不要翻译此字段,必须保持为'Luma'" diff --git a/src/i18n/zh-CN/flux.json b/src/i18n/zh-CN/flux.json new file mode 100644 index 00000000..5f63dce5 --- /dev/null +++ b/src/i18n/zh-CN/flux.json @@ -0,0 +1,222 @@ +{ + "name.taskId": { + "message": "任务 ID", + "description": "任务的 ID" + }, + "name.type": { + "message": "类型", + "description": "要生成的 FLux图片的内容类型,如'链接'、'文本'等" + }, + "name.failure": { + "message": "失败", + "description": "任务的失败状态" + }, + "name.failureReason": { + "message": "失败原因", + "description": "任务失败的原因" + }, + "name.status": { + "message": "状态", + "description": "任务的状态" + }, + "name.traceId": { + "message": "追踪 ID", + "description": "任务的追踪 ID" + }, + "name.createdAt": { + "message": "创建时间", + "description": "生成 Flux 图片的日期和时间" + }, + "name.numbers": { + "message": "图片数量", + "description": "要生成的图片数量" + }, + "name.quality": { + "message": "图片质量", + "description": "图片质量" + }, + "name.prompt": { + "message": "图像提示", + "description": "内容输入的提示" + }, + "name.ratio": { + "message": "比例", + "description": "比例参数的名称" + }, + "name.model": { + "message": "模型版本", + "description": "要生成图像所采用的模型版本" + }, + "name.fluxBot": { + "message": "Flux Bot", + "description": "Flux 图片生成器的名称" + }, + "description.numbers": { + "message": "指定生成图片的数量,值的范围为:1-4。", + "description": "参数'numbers'的描述" + }, + "description.quality": { + "message": "指定生成图片的质量,值的范围为:1-100。", + "description": "参数'quality'的描述" + }, + "description.prompt": { + "message": "生成Flux图像的提示词", + "description": "参数'prompt'的描述" + }, + "status.pending": { + "message": "等待中", + "description": "任务的等待状态" + }, + "status.processing": { + "message": "处理中", + "description": "任务的等待状态" + }, + "placeholder.paddingNoise": { + "message": "请选择...", + "description": "填充噪音输入的占位符" + }, + "placeholder.select": { + "message": "选择", + "description": "选择字段中的占位文本" + }, + "placeholder.paddingLevel": { + "message": "请选择...", + "description": "填充级别的占位符" + }, + "placeholder.prompt": { + "message": "输入要生成的图片风格的提示词,例如:a white siamese cat", + "description": "提示字段中的占位文本" + }, + "placeholder.position": { + "message": "请选择...", + "description": "位置输入的占位符" + }, + "placeholder.aspectRatio": { + "message": "请选择...", + "description": "宽高比输入的占位符" + }, + "placeholder.preset": { + "message": "请选择...", + "description": "预设输入的占位符" + }, + "placeholder.markerShape": { + "message": "请选择...", + "description": "标记形状输入的占位符" + }, + "placeholder.rotate": { + "message": "请选择...", + "description": "旋转输入的占位符" + }, + "placeholder.subMarker": { + "message": "请选择...", + "description": "子标记输入的占位符" + }, + "button.generate": { + "message": "生成", + "description": "生成Flux图像的按钮文本" + }, + "button.extend": { + "message": "扩展图片", + "description": "扩展图片按钮文本" + }, + "button.viewImage": { + "message": "查看原图", + "description": "生成Flux图片 的按钮文本" + }, + "button.download": { + "message": "下载图片", + "description": "下载图片按钮文本" + }, + "message.downloadImage": { + "message": "打开图片新窗口", + "description": "打开图片新窗口" + }, + "message.uploadReferencesExceed": { + "message": "最多可上传 5 张图片", + "description": "上传的图片数量超过限制时的错误消息" + }, + "message.uploadReferencesSuccess": { + "message": "成功上传图片", + "description": "成功上传图片时的成功消息" + }, + "message.uploadReferencesError": { + "message": "上传图片失败,请稍后重试", + "description": "图片上传失败时的错误消息" + }, + "message.startingTask": { + "message": "正在启动任务...", + "description": "绘图任务开始时的消息" + }, + "message.startTaskSuccess": { + "message": "成功发起生成任务", + "description": "成功启动任务时的成功消息" + }, + "message.startTaskFailed": { + "message": "发起任务失败,请联系管理员", + "description": "启动绘图任务失败时的错误消息" + }, + "message.usedUp": { + "message": "您的积分已用完,请购买更多积分后继续使用", + "description": "已用完时的消息" + }, + "message.generating": { + "message": "生成中...", + "description": "图像正在生成时的消息" + }, + "message.downloadVideo": { + "message": "下载此图片", + "description": "图像正在生成时的消息" + }, + "message.extendVideo": { + "message": "继续生成此图片", + "description": "图像正在生成时的消息" + }, + "message.generateFailed": { + "message": "生成图像失败", + "description": "图像生成失败时的消息" + }, + "message.uploadVideoExceed": { + "message": "上传首帧图片数量超过限制", + "description": "上传首帧图片数量超过限制时的错误信息" + }, + "message.uploadVideoSizeExceed": { + "message": "上传文件大小不能超过 10MB!", + "description": "上传文件大小不能超过 10MB!时的错误信息" + }, + "message.uploadVideoTypeFailed": { + "message": "上传文件必须是 MP4 格式!", + "description": "上传文件必须是 MP4 格式!的错误信息" + }, + "message.uploadStartImageExceed": { + "message": "上传首帧图片数量超过限制", + "description": "上传首帧图片数量超过限制时的错误信息" + }, + "message.uploadEndImageExceed": { + "message": "上传尾帧图片数量超过限制", + "description": "上传首帧图片数量超过限制时的错误信息" + }, + "message.uploadStartImageError": { + "message": "上传首帧图片失败", + "description": "上传首帧图片失败时的错误信息" + }, + "message.uploadVideoError": { + "message": "上传图片失败", + "description": "上传首帧图片失败时的错误信息" + }, + "message.uploadEndImageError": { + "message": "上传尾帧图片失败", + "description": "上传尾帧图片失败时的错误信息" + }, + "message.uploadDocumentsError": { + "message": "上传文档失败", + "description": "上传文档失败时的错误信息" + }, + "message.noOperations": { + "message": "没有可用操作", + "description": "没有可用操作时的消息" + }, + "message.noTasks": { + "message": "没有历史任务,请点击左方生成图片", + "description": "没有任务时的消息" + } +} diff --git a/src/i18n/zh-CN/site.json b/src/i18n/zh-CN/site.json index 8a768359..50be8f8f 100644 --- a/src/i18n/zh-CN/site.json +++ b/src/i18n/zh-CN/site.json @@ -79,6 +79,10 @@ "message": "Suno", "description": "展示在编辑框的标题" }, + "field.featuresFlux": { + "message": "Flux", + "description": "展示在编辑框的标题" + }, "field.featuresSupport": { "message": "客服支持", "description": "展示在编辑框的标题" @@ -267,6 +271,10 @@ "message": "打开或关闭 Suno 功能模块。", "description": "Suno 功能的描述" }, + "message.featuresFlux": { + "message": "打开或关闭 FLux 功能模块。", + "description": "FLux 功能的描述" + }, "message.featuresLuma": { "message": "打开或关闭 Luma 功能模块。", "description": "Luma 功能的描述" diff --git a/src/layouts/Flux.vue b/src/layouts/Flux.vue new file mode 100644 index 00000000..3f327656 --- /dev/null +++ b/src/layouts/Flux.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/layouts/Midjourney.vue b/src/layouts/Midjourney.vue index a181b624..908aebf8 100644 --- a/src/layouts/Midjourney.vue +++ b/src/layouts/Midjourney.vue @@ -1,6 +1,7 @@