From c6bf89e328ced5412fff457e4741c88da91acc54 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 10:51:43 +0800 Subject: [PATCH 01/11] 3.0.2 --- src/api/controllers/images.ts | 1 + src/api/routes/images.ts | 10 +++++----- src/lib/services/TaskPollingService.ts | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/api/controllers/images.ts b/src/api/controllers/images.ts index 41d6106..4c3f948 100644 --- a/src/api/controllers/images.ts +++ b/src/api/controllers/images.ts @@ -11,6 +11,7 @@ const DEFAULT_ASSISTANT_ID = "513695"; export const DEFAULT_MODEL = "jimeng-3.0"; const DRAFT_VERSION = "3.0.2"; const MODEL_MAP = { + "jimeng-4.1": "high_aes_general_v41", "jimeng-3.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b", "jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L", diff --git a/src/api/routes/images.ts b/src/api/routes/images.ts index 463d343..90ebdd0 100644 --- a/src/api/routes/images.ts +++ b/src/api/routes/images.ts @@ -61,7 +61,7 @@ export default { post: { "/generations": async (request: Request) => { request - // .validate("body.model", v => _.isUndefined(v) || _.isString(v)) + .validate("body.model", v => _.isUndefined(v) || _.isString(v)) .validate("body.task_id", _.isString) .validate("body.prompt", _.isString) // .validate("body.negative_prompt", v => _.isUndefined(v) || _.isString(v)) @@ -75,7 +75,7 @@ export default { // 随机挑选一个refresh_token const token = _.sample(tokens); const { - // model, + model, task_id, prompt, // negative_prompt: negativePrompt, @@ -85,10 +85,10 @@ export default { response_format, } = request.body; const responseFormat = _.defaultTo(response_format, "url"); - + console.log("图片生成", model, task_id, prompt, width, height, responseFormat); if (USE_DATABASE_MODE) { // 使用新的数据库方法 - await DatabaseGenerationService.generateImagesV2('jimeng-3.0', task_id, prompt, { + await DatabaseGenerationService.generateImagesV2(model||'jimeng-3.0', task_id, prompt, { width, height, sampleStrength: 0.5, @@ -97,7 +97,7 @@ export default { }, token); } else { // 使用原有方法(不等待结果) - generateImages('jimeng-3.0', task_id, prompt, { + generateImages(model||'jimeng-3.0', task_id, prompt, { width, height, sampleStrength: 0.5, diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index e5f8f06..52be279 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -771,6 +771,7 @@ export class TaskPollingService { // 映射模型 const MODEL_MAP = { + "jimeng-4.1": "high_aes_general_v41", "jimeng-3.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b", "jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L", From 5a8ef123f80e8f7c11e864735d7286d1cd4787de Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 10:56:57 +0800 Subject: [PATCH 02/11] 1 --- src/api/routes/images.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/api/routes/images.ts b/src/api/routes/images.ts index 90ebdd0..71409db 100644 --- a/src/api/routes/images.ts +++ b/src/api/routes/images.ts @@ -4,6 +4,7 @@ import Request from "@/lib/request/Request.ts"; import { generateImages } from "@/api/controllers/images.ts"; import { tokenSplit } from "@/api/controllers/core.ts"; import util from "@/lib/util.ts"; +import logger from "@/lib/logger.ts"; import { ImagesTaskCache } from '@/api/ImagesTaskCache.ts'; import DatabaseGenerationService from '@/lib/services/DatabaseGenerationService.js'; @@ -85,7 +86,8 @@ export default { response_format, } = request.body; const responseFormat = _.defaultTo(response_format, "url"); - console.log("图片生成", model, task_id, prompt, width, height, responseFormat); + logger.info(`\n图片生成: model: ${model}, task_id: ${task_id}, width: ${width}, height: ${height}, responseFormat: ${responseFormat}, \n prompt: ${prompt}`); + if (USE_DATABASE_MODE) { // 使用新的数据库方法 await DatabaseGenerationService.generateImagesV2(model||'jimeng-3.0', task_id, prompt, { From 081768b7a421fd477c4766dfca525732dbf1f082 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 11:35:33 +0800 Subject: [PATCH 03/11] 1 --- src/api/controllers/core.ts | 330 ++++++++++++++++++++++ src/lib/database/models/GenerationTask.ts | 1 + src/lib/services/TaskPollingService.ts | 185 ++++++------ 3 files changed, 437 insertions(+), 79 deletions(-) diff --git a/src/api/controllers/core.ts b/src/api/controllers/core.ts index 68ed014..37749c4 100644 --- a/src/api/controllers/core.ts +++ b/src/api/controllers/core.ts @@ -292,4 +292,334 @@ export async function getTokenLiveStatus(refreshToken: string) { } catch (err) { return false; } +} + + +export function image3Options( + model, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt = '', + resolutionType = "1k", + generateCount = 4 +){ + const min_version = "3.0.2" + const version = "3.0.2" + return { + params: { + babi_param: encodeURIComponent( + JSON.stringify({ + scenario: "image_video_generation", + feature_key: "aigc_to_image", + feature_entrance: "to_image", + feature_entrance_detail: "to_image-" + model, + }) + ), + }, + data: { + extend: { + root_model: model, + template_id: "", + }, + submit_id: util.uuid(), + metrics_extra: JSON.stringify({ + templateId: "", + generateCount: generateCount, + promptSource: "custom", + templateSource: "", + lastRequestId: "", + originRequestId: "", + }), + draft_content: JSON.stringify({ + type: "draft", + id: util.uuid(), + min_version: min_version, + is_from_tsn: true, + version: version, + main_component_id: componentId, + component_list: [ + { + type: "image_base_component", + id: componentId, + min_version: min_version, + generate_type: "generate", + aigc_mode: "workbench", + abilities: { + type: "", + id: util.uuid(), + generate: { + type: "", + id: util.uuid(), + core_param: { + type: "", + id: util.uuid(), + model, + prompt:prompt, + negative_prompt: negativePrompt, + seed: Math.floor(Math.random() * 100000000) + 2500000000, + sample_strength: sampleStrength, + image_ratio: 1, + large_image_info: { + type: "", + id: util.uuid(), + height, + width, + resolution_type: resolutionType, + }, + }, + history_option: { + type: "", + id: util.uuid(), + }, + }, + }, + }, + ], + }), + http_common_info: { + aid: Number(DEFAULT_ASSISTANT_ID), + }, + }, + } +} + + +export function image4Options_0302( + model, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt = '', + resolutionType = "2k", + generateCount = 4 +){ + const min_version = "3.0.2" + const version = "3.0.2" + const submit_id = util.uuid() + return { + params: { + babi_param: encodeURIComponent( + JSON.stringify({ + scenario: "image_video_generation", + feature_key: "aigc_to_image", + feature_entrance: "to_image", + feature_entrance_detail: "to_image-" + model, + }) + ), + }, + data: { + extend: { + root_model: model, + }, + submit_id: submit_id, + metrics_extra: JSON.stringify({ + promptSource: "custom", + generateCount: generateCount, + enterFrom: "click", + sceneOptions:JSON.stringify([ + { + "type": "image", + "scene": "ImageBasicGenerate", + "modelReqKey": model, + "resolutionType": resolutionType, + "abilityList": [], + "benefitCount": 4, + "reportParams": { + "enterSource": "generate", + "vipSource": "generate", + "extraVipFunctionKey": model+"-"+resolutionType, + "useVipFunctionDetailsReporterHoc": true + } + } + ]), + isBoxSelect: false, + isCutout: false, + generateId: submit_id, + isRegenerate: false + }), + draft_content: JSON.stringify({ + type: "draft", + id: util.uuid(), + min_version: min_version, + is_from_tsn: true, + version: version, + main_component_id: componentId, + component_list: [ + { + type: "image_base_component", + id: componentId, + min_version: min_version, + generate_type: "generate", + aigc_mode: "workbench", + metadata: { + "type": "", + "id": util.uuid(), + "created_platform": 3, + "created_platform_version": "", + "created_time_in_ms": Math.floor(Date.now()/1000), + "created_did": "" + }, + abilities: { + type: "", + id: util.uuid(), + generate: { + type: "", + id: util.uuid(), + core_param: { + type: "", + id: util.uuid(), + model, + prompt, + negative_prompt: negativePrompt, + seed: Math.floor(Math.random() * 100000000) + 2500000000, + sample_strength: sampleStrength, + image_ratio: 5, + large_image_info: { + type: "", + id: util.uuid(), + height, + width, + resolution_type: resolutionType, + }, + intelligent_ratio: false + }, + }, + gen_option: { + "type": "", + "id": util.uuid(), + "gen_count": generateCount, + "generate_all": false + } + }, + }, + ], + }), + http_common_info: { + aid: Number(DEFAULT_ASSISTANT_ID), + }, + }, + } +} + +export function image4Options( + model, + DRAFT_VERSION, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt = '', + resolutionType = "2k", + generateCount = 4 +){ + const min_version = "3.0.2" + const version = "3.3.7" + const submit_id = util.uuid() + return { + params: { + da_version:version, + web_component_open_flag:1, + web_version:"7.5.0", + aigc_features:"app_lip_sync", + msToken:"", + a_bogus:"", + }, + data: { + extend: { + root_model: model, + }, + submit_id: submit_id, + metrics_extra: JSON.stringify({ + promptSource: "custom", + generateCount: generateCount, + enterFrom: "click", + sceneOptions:JSON.stringify([ + { + "type": "image", + "scene": "ImageBasicGenerate", + "modelReqKey": model, + "resolutionType": resolutionType, + "abilityList": [], + "benefitCount": 4, + "reportParams": { + "enterSource": "generate", + "vipSource": "generate", + "extraVipFunctionKey": model+"-"+resolutionType, + "useVipFunctionDetailsReporterHoc": true + } + } + ]), + isBoxSelect: false, + isCutout: false, + generateId: submit_id, + isRegenerate: false + }), + draft_content: JSON.stringify({ + type: "draft", + id: util.uuid(), + min_version: min_version, + is_from_tsn: true, + version: version, + main_component_id: componentId, + component_list: [ + { + type: "image_base_component", + id: componentId, + min_version: min_version, + generate_type: "generate", + aigc_mode: "workbench", + metadata: { + "type": "", + "id": util.uuid(), + "created_platform": 3, + "created_platform_version": "", + "created_time_in_ms": Math.floor(Date.now()/1000), + "created_did": "" + }, + abilities: { + type: "", + id: util.uuid(), + generate: { + type: "", + id: util.uuid(), + core_param: { + type: "", + id: util.uuid(), + model, + prompt, + negative_prompt: negativePrompt, + seed: Math.floor(Math.random() * 100000000) + 2500000000, + sample_strength: sampleStrength, + image_ratio: 5, + large_image_info: { + type: "", + id: util.uuid(), + height, + width, + resolution_type: resolutionType, + }, + intelligent_ratio: false + }, + }, + gen_option: { + "type": "", + "id": util.uuid(), + "gen_count": 4, + "generate_all": false + } + }, + }, + ], + }), + http_common_info: { + aid: Number(DEFAULT_ASSISTANT_ID), + }, + }, + } } \ No newline at end of file diff --git a/src/lib/database/models/GenerationTask.ts b/src/lib/database/models/GenerationTask.ts index e1295a0..16a0fc2 100644 --- a/src/lib/database/models/GenerationTask.ts +++ b/src/lib/database/models/GenerationTask.ts @@ -23,6 +23,7 @@ export interface IGenerationTask { duration?: number; // 时长(毫秒) ratio?: string; // 比例 response_format?: string; // 响应格式 + generate_count?: number; // 生成数量 }; // 生成过程中的内部参数 diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 52be279..5a43062 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -8,7 +8,7 @@ import logger from '@/lib/logger.js'; import TOSService from '@/lib/tos/tos-service.js'; import { generateImages as originalGenerateImages } from '@/api/controllers/images.js'; import { generateVideo as originalGenerateVideo } from '@/api/controllers/video.js'; -import { request } from '@/api/controllers/core.js'; +import { request, image4Options_0302, image3Options, image4Options } from '@/api/controllers/core.js'; import EX from "@/api/consts/exceptions.ts"; const timeZone = 'Asia/Shanghai'; @@ -766,7 +766,8 @@ export class TaskPollingService { * 调用图片生成API */ private async callImageGeneration(task: IGenerationTask): Promise { - const { model, prompt, width = 1024, height = 1024, sample_strength = 0.5, negative_prompt = "" } = task.original_params; + const { model, prompt, width = 1024, height = 1024, sample_strength = 0.5, + negative_prompt = "", generate_count = 4 } = task.original_params; const refreshToken = task.internal_params.refresh_token; // 映射模型 @@ -784,87 +785,113 @@ export class TaskPollingService { const componentId = this.generateUUID(); const submitId = this.generateUUID(); - + let isModel4 = model.startsWith("jimeng-4"); + let options:any = image3Options( + mappedModel, + componentId, + prompt, + sample_strength, + height, + width, + negative_prompt, + '1k', + generate_count, + ); + if(isModel4){ + options = image4Options_0302( + mappedModel, + componentId, + prompt, + sample_strength, + height, + width, + negative_prompt, + '1k', + generate_count, + ); + } + logger.info("生成图片 发起请求", options); const { aigc_data } = await request( "post", "/mweb/v1/aigc_draft/generate", refreshToken, - { - params: { - babi_param: encodeURIComponent( - JSON.stringify({ - scenario: "image_video_generation", - feature_key: "aigc_to_image", - feature_entrance: "to_image", - feature_entrance_detail: "to_image-" + mappedModel, - }) - ), - }, - data: { - extend: { - root_model: mappedModel, - template_id: "", - }, - submit_id: submitId, - metrics_extra: JSON.stringify({ - templateId: "", - generateCount: 1, - promptSource: "custom", - templateSource: "", - lastRequestId: "", - originRequestId: "", - }), - draft_content: JSON.stringify({ - type: "draft", - id: this.generateUUID(), - min_version: "3.0.2", - is_from_tsn: true, - version: "3.0.2", - main_component_id: componentId, - component_list: [ - { - type: "image_base_component", - id: componentId, - min_version: "3.0.2", - generate_type: "generate", - aigc_mode: "workbench", - abilities: { - type: "", - id: this.generateUUID(), - generate: { - type: "", - id: this.generateUUID(), - core_param: { - type: "", - id: this.generateUUID(), - model: mappedModel, - prompt, - negative_prompt, - seed: Math.floor(Math.random() * 100000000) + 2500000000, - sample_strength, - image_ratio: 1, - large_image_info: { - type: "", - id: this.generateUUID(), - height, - width, - resolution_type: "1k", - }, - }, - history_option: { - type: "", - id: this.generateUUID(), - }, - }, - }, - }, - ], - }), - http_common_info: { - aid: Number(process.env.DEFAULT_ASSISTANT_ID || "513695"), - }, - }, - } + options, + // { + // params: { + // babi_param: encodeURIComponent( + // JSON.stringify({ + // scenario: "image_video_generation", + // feature_key: "aigc_to_image", + // feature_entrance: "to_image", + // feature_entrance_detail: "to_image-" + mappedModel, + // }) + // ), + // }, + // data: { + // extend: { + // root_model: mappedModel, + // template_id: "", + // }, + // submit_id: submitId, + // metrics_extra: JSON.stringify({ + // templateId: "", + // generateCount: 1, + // promptSource: "custom", + // templateSource: "", + // lastRequestId: "", + // originRequestId: "", + // }), + // draft_content: JSON.stringify({ + // type: "draft", + // id: this.generateUUID(), + // min_version: "3.0.2", + // is_from_tsn: true, + // version: "3.0.2", + // main_component_id: componentId, + // component_list: [ + // { + // type: "image_base_component", + // id: componentId, + // min_version: "3.0.2", + // generate_type: "generate", + // aigc_mode: "workbench", + // abilities: { + // type: "", + // id: this.generateUUID(), + // generate: { + // type: "", + // id: this.generateUUID(), + // core_param: { + // type: "", + // id: this.generateUUID(), + // model: mappedModel, + // prompt, + // negative_prompt, + // seed: Math.floor(Math.random() * 100000000) + 2500000000, + // sample_strength, + // image_ratio: 1, + // large_image_info: { + // type: "", + // id: this.generateUUID(), + // height, + // width, + // resolution_type: "1k", + // }, + // }, + // history_option: { + // type: "", + // id: this.generateUUID(), + // }, + // }, + // }, + // }, + // ], + // }), + // http_common_info: { + // aid: Number(process.env.DEFAULT_ASSISTANT_ID || "513695"), + // }, + // }, + // } ); const historyId = aigc_data.history_record_id; From 1be5daf482cd2959995cbf8ca28a3ec67c6322df Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 11:37:44 +0800 Subject: [PATCH 04/11] 1 --- src/lib/services/TaskPollingService.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 5a43062..9f74eef 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -806,11 +806,11 @@ export class TaskPollingService { height, width, negative_prompt, - '1k', + '2k', generate_count, ); } - logger.info("生成图片 发起请求", options); + taskLog(`生成图片 发起请求 isModel4 ${isModel4}`); const { aigc_data } = await request( "post", "/mweb/v1/aigc_draft/generate", From 964b27df2dd4ae3c5d1faf71fb9399878ffda3f1 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 11:43:46 +0800 Subject: [PATCH 05/11] 1 --- src/lib/services/TaskPollingService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 9f74eef..8490e34 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -327,6 +327,7 @@ export class TaskPollingService { } taskLog(`Starting task: ${task.task_id} (${task.task_type})`); + taskLog(`original_params: ${JSON.stringify(task.original_params)}`); // 调用原有生成方法获取historyId let historyId: string; From 9930b2a97921333c031d4c22df6a7ec5311e3fac Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 12:43:29 +0800 Subject: [PATCH 06/11] 1 --- src/lib/services/TaskPollingService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 8490e34..a294303 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -397,7 +397,8 @@ export class TaskPollingService { } const { status, fail_code: failCode, item_list } = result[historyId]; - + + taskLog(`调用即梦API检查结果 ${task.task_id} [status:${status} fail_code: ${failCode}]`); if (status === 20) { // 仍在生成中,更新下次轮询时间 await GenerationTask.updateOne( From c0b0a0a3bc384f47de23f3b85acda6e72cbb5ad8 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 12:48:45 +0800 Subject: [PATCH 07/11] 1 --- src/lib/services/TaskPollingService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index a294303..893a336 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -399,7 +399,7 @@ export class TaskPollingService { const { status, fail_code: failCode, item_list } = result[historyId]; taskLog(`调用即梦API检查结果 ${task.task_id} [status:${status} fail_code: ${failCode}]`); - if (status === 20) { + if (status === 20 || status === 45) { // 仍在生成中,更新下次轮询时间 await GenerationTask.updateOne( { task_id: task.task_id }, From 1d278d7c65f628b9dfbca6baa3dc833d4776a769 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 13:17:32 +0800 Subject: [PATCH 08/11] 4.x --- src/api/controllers/core.ts | 118 ----------- src/api/controllers/images.ts | 186 ++++++++++-------- src/api/routes/images.ts | 16 +- src/lib/services/DatabaseGenerationService.ts | 4 +- src/lib/services/TaskPollingService.ts | 4 +- 5 files changed, 125 insertions(+), 203 deletions(-) diff --git a/src/api/controllers/core.ts b/src/api/controllers/core.ts index 37749c4..1963dd0 100644 --- a/src/api/controllers/core.ts +++ b/src/api/controllers/core.ts @@ -504,122 +504,4 @@ export function image4Options_0302( }, }, } -} - -export function image4Options( - model, - DRAFT_VERSION, - componentId, - prompt, - sampleStrength, - height, - width, - negativePrompt = '', - resolutionType = "2k", - generateCount = 4 -){ - const min_version = "3.0.2" - const version = "3.3.7" - const submit_id = util.uuid() - return { - params: { - da_version:version, - web_component_open_flag:1, - web_version:"7.5.0", - aigc_features:"app_lip_sync", - msToken:"", - a_bogus:"", - }, - data: { - extend: { - root_model: model, - }, - submit_id: submit_id, - metrics_extra: JSON.stringify({ - promptSource: "custom", - generateCount: generateCount, - enterFrom: "click", - sceneOptions:JSON.stringify([ - { - "type": "image", - "scene": "ImageBasicGenerate", - "modelReqKey": model, - "resolutionType": resolutionType, - "abilityList": [], - "benefitCount": 4, - "reportParams": { - "enterSource": "generate", - "vipSource": "generate", - "extraVipFunctionKey": model+"-"+resolutionType, - "useVipFunctionDetailsReporterHoc": true - } - } - ]), - isBoxSelect: false, - isCutout: false, - generateId: submit_id, - isRegenerate: false - }), - draft_content: JSON.stringify({ - type: "draft", - id: util.uuid(), - min_version: min_version, - is_from_tsn: true, - version: version, - main_component_id: componentId, - component_list: [ - { - type: "image_base_component", - id: componentId, - min_version: min_version, - generate_type: "generate", - aigc_mode: "workbench", - metadata: { - "type": "", - "id": util.uuid(), - "created_platform": 3, - "created_platform_version": "", - "created_time_in_ms": Math.floor(Date.now()/1000), - "created_did": "" - }, - abilities: { - type: "", - id: util.uuid(), - generate: { - type: "", - id: util.uuid(), - core_param: { - type: "", - id: util.uuid(), - model, - prompt, - negative_prompt: negativePrompt, - seed: Math.floor(Math.random() * 100000000) + 2500000000, - sample_strength: sampleStrength, - image_ratio: 5, - large_image_info: { - type: "", - id: util.uuid(), - height, - width, - resolution_type: resolutionType, - }, - intelligent_ratio: false - }, - }, - gen_option: { - "type": "", - "id": util.uuid(), - "gen_count": 4, - "generate_all": false - } - }, - }, - ], - }), - http_common_info: { - aid: Number(DEFAULT_ASSISTANT_ID), - }, - }, - } } \ No newline at end of file diff --git a/src/api/controllers/images.ts b/src/api/controllers/images.ts index 4c3f948..34fd392 100644 --- a/src/api/controllers/images.ts +++ b/src/api/controllers/images.ts @@ -3,7 +3,7 @@ import _ from "lodash"; import APIException from "@/lib/exceptions/APIException.ts"; import EX from "@/api/consts/exceptions.ts"; import util from "@/lib/util.ts"; -import { getCredit, receiveCredit, request } from "./core.ts"; +import { getCredit, receiveCredit, request, image3Options, image4Options_0302 } from "./core.ts"; import logger from "@/lib/logger.ts"; import { ImagesTaskCache } from '@/api/ImagesTaskCache.ts'; @@ -11,7 +11,9 @@ const DEFAULT_ASSISTANT_ID = "513695"; export const DEFAULT_MODEL = "jimeng-3.0"; const DRAFT_VERSION = "3.0.2"; const MODEL_MAP = { + "jimeng-4.5": "high_aes_general_v40l", "jimeng-4.1": "high_aes_general_v41", + "jimeng-4.0": "high_aes_general_v40", "jimeng-3.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b", "jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L", @@ -34,11 +36,13 @@ export async function generateImages( height = 1024, sampleStrength = 0.5, negativePrompt = "", + generateCount = 4, }: { width?: number; height?: number; sampleStrength?: number; negativePrompt?: string; + generateCount?: number; }, refreshToken: string ) { @@ -54,86 +58,114 @@ export async function generateImages( await receiveCredit(refreshToken); const componentId = util.uuid(); + let isModel4 = model.startsWith("jimeng-4"); + let options = {}; + if(isModel4){ + options = image4Options_0302( + model, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt, + '2k', + generateCount, + ); + }else{ + options = image3Options( + model, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt, + '1k', + generateCount, + ); + } const { aigc_data } = await request( "post", "/mweb/v1/aigc_draft/generate", refreshToken, - { - params: { - babi_param: encodeURIComponent( - JSON.stringify({ - scenario: "image_video_generation", - feature_key: "aigc_to_image", - feature_entrance: "to_image", - feature_entrance_detail: "to_image-" + model, - }) - ), - }, - data: { - extend: { - root_model: model, - template_id: "", - }, - submit_id: util.uuid(), - metrics_extra: JSON.stringify({ - templateId: "", - generateCount: 1, - promptSource: "custom", - templateSource: "", - lastRequestId: "", - originRequestId: "", - }), - draft_content: JSON.stringify({ - type: "draft", - id: util.uuid(), - min_version: DRAFT_VERSION, - is_from_tsn: true, - version: DRAFT_VERSION, - main_component_id: componentId, - component_list: [ - { - type: "image_base_component", - id: componentId, - min_version: DRAFT_VERSION, - generate_type: "generate", - aigc_mode: "workbench", - abilities: { - type: "", - id: util.uuid(), - generate: { - type: "", - id: util.uuid(), - core_param: { - type: "", - id: util.uuid(), - model, - prompt, - negative_prompt: negativePrompt, - seed: Math.floor(Math.random() * 100000000) + 2500000000, - sample_strength: sampleStrength, - image_ratio: 1, - large_image_info: { - type: "", - id: util.uuid(), - height, - width, - resolution_type: "1k", - }, - }, - history_option: { - type: "", - id: util.uuid(), - }, - }, - }, - }, - ], - }), - http_common_info: { - aid: Number(DEFAULT_ASSISTANT_ID), - }, - }, - } + options, + // { + // params: { + // babi_param: encodeURIComponent( + // JSON.stringify({ + // scenario: "image_video_generation", + // feature_key: "aigc_to_image", + // feature_entrance: "to_image", + // feature_entrance_detail: "to_image-" + model, + // }) + // ), + // }, + // data: { + // extend: { + // root_model: model, + // template_id: "", + // }, + // submit_id: util.uuid(), + // metrics_extra: JSON.stringify({ + // templateId: "", + // generateCount: 1, + // promptSource: "custom", + // templateSource: "", + // lastRequestId: "", + // originRequestId: "", + // }), + // draft_content: JSON.stringify({ + // type: "draft", + // id: util.uuid(), + // min_version: DRAFT_VERSION, + // is_from_tsn: true, + // version: DRAFT_VERSION, + // main_component_id: componentId, + // component_list: [ + // { + // type: "image_base_component", + // id: componentId, + // min_version: DRAFT_VERSION, + // generate_type: "generate", + // aigc_mode: "workbench", + // abilities: { + // type: "", + // id: util.uuid(), + // generate: { + // type: "", + // id: util.uuid(), + // core_param: { + // type: "", + // id: util.uuid(), + // model, + // prompt, + // negative_prompt: negativePrompt, + // seed: Math.floor(Math.random() * 100000000) + 2500000000, + // sample_strength: sampleStrength, + // image_ratio: 1, + // large_image_info: { + // type: "", + // id: util.uuid(), + // height, + // width, + // resolution_type: "1k", + // }, + // }, + // history_option: { + // type: "", + // id: util.uuid(), + // }, + // }, + // }, + // }, + // ], + // }), + // http_common_info: { + // aid: Number(DEFAULT_ASSISTANT_ID), + // }, + // }, + // } ); const historyId = aigc_data.history_record_id; if (!historyId) diff --git a/src/api/routes/images.ts b/src/api/routes/images.ts index 71409db..8dfc767 100644 --- a/src/api/routes/images.ts +++ b/src/api/routes/images.ts @@ -68,7 +68,8 @@ export default { // .validate("body.negative_prompt", v => _.isUndefined(v) || _.isString(v)) .validate("body.width", v => _.isUndefined(v) || _.isFinite(v)) .validate("body.height", v => _.isUndefined(v) || _.isFinite(v)) - // .validate("body.sample_strength", v => _.isUndefined(v) || _.isFinite(v)) + .validate("body.sample_strength", v => _.isUndefined(v) || _.isFinite(v)) + .validate("body.generate_count", v => _.isUndefined(v) || _.isFinite(v)) .validate("body.response_format", v => _.isUndefined(v) || _.isString(v)) .validate("headers.authorization", _.isString); // refresh_token切分 @@ -82,28 +83,31 @@ export default { // negative_prompt: negativePrompt, width, height, - // sample_strength: sampleStrength, + sample_strength, + generate_count, response_format, } = request.body; const responseFormat = _.defaultTo(response_format, "url"); - logger.info(`\n图片生成: model: ${model}, task_id: ${task_id}, width: ${width}, height: ${height}, responseFormat: ${responseFormat}, \n prompt: ${prompt}`); + // logger.info(`\n图片生成: model: ${model}, task_id: ${task_id}, width: ${width}, height: ${height}, responseFormat: ${responseFormat}, \n prompt: ${prompt}`); if (USE_DATABASE_MODE) { // 使用新的数据库方法 await DatabaseGenerationService.generateImagesV2(model||'jimeng-3.0', task_id, prompt, { width, height, - sampleStrength: 0.5, + sampleStrength: sample_strength || 0.5, negativePrompt: "", - response_format: responseFormat + response_format: responseFormat, + generateCount: generate_count || 4, }, token); } else { // 使用原有方法(不等待结果) generateImages(model||'jimeng-3.0', task_id, prompt, { width, height, - sampleStrength: 0.5, + sampleStrength: sample_strength || 0.5, negativePrompt: "", + generateCount: generate_count || 4, }, token); } diff --git a/src/lib/services/DatabaseGenerationService.ts b/src/lib/services/DatabaseGenerationService.ts index 49ba3cf..e3d28f1 100644 --- a/src/lib/services/DatabaseGenerationService.ts +++ b/src/lib/services/DatabaseGenerationService.ts @@ -45,6 +45,7 @@ export class DatabaseGenerationService { sampleStrength?: number; negativePrompt?: string; response_format?: string; + generateCount?: number; }, refreshToken: string ): Promise { @@ -74,7 +75,8 @@ export class DatabaseGenerationService { height: params.height || 1024, sample_strength: params.sampleStrength || 0.5, negative_prompt: params.negativePrompt || "", - response_format: params.response_format + response_format: params.response_format, + generate_count: params.generateCount || 4, }, internal_params: { refresh_token: refreshToken diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 893a336..d94c7c3 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -8,7 +8,7 @@ import logger from '@/lib/logger.js'; import TOSService from '@/lib/tos/tos-service.js'; import { generateImages as originalGenerateImages } from '@/api/controllers/images.js'; import { generateVideo as originalGenerateVideo } from '@/api/controllers/video.js'; -import { request, image4Options_0302, image3Options, image4Options } from '@/api/controllers/core.js'; +import { request, image4Options_0302, image3Options } from '@/api/controllers/core.js'; import EX from "@/api/consts/exceptions.ts"; const timeZone = 'Asia/Shanghai'; @@ -774,7 +774,9 @@ export class TaskPollingService { // 映射模型 const MODEL_MAP = { + "jimeng-4.5": "high_aes_general_v40l", "jimeng-4.1": "high_aes_general_v41", + "jimeng-4.0": "high_aes_general_v40", "jimeng-3.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b", "jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L", From 02bf934556fadeecd477e948e399a1b742c0cd1d Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 13:27:22 +0800 Subject: [PATCH 09/11] 1 --- src/api/controllers/core.ts | 1 + src/api/routes/images.ts | 2 +- src/lib/services/TaskPollingService.ts | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/api/controllers/core.ts b/src/api/controllers/core.ts index 1963dd0..6c2d149 100644 --- a/src/api/controllers/core.ts +++ b/src/api/controllers/core.ts @@ -256,6 +256,7 @@ export async function uploadFile( */ export function checkResult(result: AxiosResponse) { const { ret, errmsg, data } = result.data; + console.log("检查请求结果", { ret, errmsg } ); if (!_.isFinite(Number(ret))) return result.data; if (ret === '0') return data; if (ret === '5000') diff --git a/src/api/routes/images.ts b/src/api/routes/images.ts index 8dfc767..205ec27 100644 --- a/src/api/routes/images.ts +++ b/src/api/routes/images.ts @@ -88,7 +88,7 @@ export default { response_format, } = request.body; const responseFormat = _.defaultTo(response_format, "url"); - // logger.info(`\n图片生成: model: ${model}, task_id: ${task_id}, width: ${width}, height: ${height}, responseFormat: ${responseFormat}, \n prompt: ${prompt}`); + logger.info(`\n发起图片生成: model: ${model}, task_id: ${task_id}, width: ${width}, height: ${height}, responseFormat: ${responseFormat}, sample_strength: ${sample_strength}, generate_count: ${generate_count}`); if (USE_DATABASE_MODE) { // 使用新的数据库方法 diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index d94c7c3..58e4852 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -327,7 +327,7 @@ export class TaskPollingService { } taskLog(`Starting task: ${task.task_id} (${task.task_type})`); - taskLog(`original_params: ${JSON.stringify(task.original_params)}`); + // taskLog(`original_params: ${JSON.stringify(task.original_params)}`); // 调用原有生成方法获取historyId let historyId: string; @@ -815,7 +815,7 @@ export class TaskPollingService { ); } taskLog(`生成图片 发起请求 isModel4 ${isModel4}`); - const { aigc_data } = await request( + const res = await request( "post", "/mweb/v1/aigc_draft/generate", refreshToken, @@ -897,7 +897,7 @@ export class TaskPollingService { // }, // } ); - + const { aigc_data } = res; const historyId = aigc_data.history_record_id; if (!historyId) { throw new Error('Failed to get history_record_id from image generation API'); From 4fe3520cca8ff913914a7ea6903ea2c3d774a59e Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 13:59:32 +0800 Subject: [PATCH 10/11] t1 --- src/api/controllers/core.ts | 120 +++++++++++++++++++++++++ src/lib/services/TaskPollingService.ts | 15 +++- 2 files changed, 133 insertions(+), 2 deletions(-) diff --git a/src/api/controllers/core.ts b/src/api/controllers/core.ts index 6c2d149..dee7360 100644 --- a/src/api/controllers/core.ts +++ b/src/api/controllers/core.ts @@ -505,4 +505,124 @@ export function image4Options_0302( }, }, } +} + + +export function image4Options_0337( + model, + componentId, + prompt, + sampleStrength, + height, + width, + negativePrompt = '', + resolutionType = "2k", + generateCount = 4 +){ + const min_version = "3.0.2" + const version = "3.3.7" + const submit_id = util.uuid() + return { + params: { + babi_param: encodeURIComponent( + JSON.stringify({ + scenario: "image_video_generation", + feature_key: "aigc_to_image", + feature_entrance: "to_image", + feature_entrance_detail: "to_image-" + model, + }) + ), + }, + data: { + extend: { + root_model: model, + }, + submit_id: submit_id, + metrics_extra: JSON.stringify({ + promptSource: "custom", + generateCount: generateCount, + enterFrom: "click", + sceneOptions:JSON.stringify([ + { + "type": "image", + "scene": "ImageBasicGenerate", + "modelReqKey": model, + "resolutionType": resolutionType, + "abilityList": [], + "benefitCount": 4, + "reportParams": { + "enterSource": "generate", + "vipSource": "generate", + "extraVipFunctionKey": model+"-"+resolutionType, + "useVipFunctionDetailsReporterHoc": true + } + } + ]), + isBoxSelect: false, + isCutout: false, + generateId: submit_id, + isRegenerate: false + }), + draft_content: JSON.stringify({ + type: "draft", + id: util.uuid(), + min_version: min_version, + is_from_tsn: true, + version: version, + main_component_id: componentId, + component_list: [ + { + type: "image_base_component", + id: componentId, + min_version: min_version, + generate_type: "generate", + aigc_mode: "workbench", + metadata: { + "type": "", + "id": util.uuid(), + "created_platform": 3, + "created_platform_version": "", + "created_time_in_ms": Math.floor(Date.now()/1000), + "created_did": "" + }, + abilities: { + type: "", + id: util.uuid(), + generate: { + type: "", + id: util.uuid(), + core_param: { + type: "", + id: util.uuid(), + model, + prompt, + negative_prompt: negativePrompt, + seed: Math.floor(Math.random() * 100000000) + 2500000000, + sample_strength: sampleStrength, + image_ratio: 5, + large_image_info: { + type: "", + id: util.uuid(), + height, + width, + resolution_type: resolutionType, + }, + intelligent_ratio: false + }, + }, + gen_option: { + "type": "", + "id": util.uuid(), + "gen_count": generateCount, + "generate_all": false + } + }, + }, + ], + }), + http_common_info: { + aid: Number(DEFAULT_ASSISTANT_ID), + }, + }, + } } \ No newline at end of file diff --git a/src/lib/services/TaskPollingService.ts b/src/lib/services/TaskPollingService.ts index 58e4852..2b38987 100644 --- a/src/lib/services/TaskPollingService.ts +++ b/src/lib/services/TaskPollingService.ts @@ -8,7 +8,7 @@ import logger from '@/lib/logger.js'; import TOSService from '@/lib/tos/tos-service.js'; import { generateImages as originalGenerateImages } from '@/api/controllers/images.js'; import { generateVideo as originalGenerateVideo } from '@/api/controllers/video.js'; -import { request, image4Options_0302, image3Options } from '@/api/controllers/core.js'; +import { request, image4Options_0302, image4Options_0337, image3Options } from '@/api/controllers/core.js'; import EX from "@/api/consts/exceptions.ts"; const timeZone = 'Asia/Shanghai'; @@ -802,7 +802,7 @@ export class TaskPollingService { generate_count, ); if(isModel4){ - options = image4Options_0302( + options = image4Options_0337( mappedModel, componentId, prompt, @@ -813,6 +813,17 @@ export class TaskPollingService { '2k', generate_count, ); + // options = image4Options_0302( + // mappedModel, + // componentId, + // prompt, + // sample_strength, + // height, + // width, + // negative_prompt, + // '2k', + // generate_count, + // ); } taskLog(`生成图片 发起请求 isModel4 ${isModel4}`); const res = await request( From 9a0934c67550c4a23c018052a81a28735932928a Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 14:02:05 +0800 Subject: [PATCH 11/11] t2 --- src/api/controllers/core.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/api/controllers/core.ts b/src/api/controllers/core.ts index dee7360..76e6af5 100644 --- a/src/api/controllers/core.ts +++ b/src/api/controllers/core.ts @@ -524,6 +524,10 @@ export function image4Options_0337( const submit_id = util.uuid() return { params: { + da_version: version, + web_component_open_flag:1, + web_version:'7.5.0', + aigc_features:'app_lip_sync', babi_param: encodeURIComponent( JSON.stringify({ scenario: "image_video_generation",