From 081768b7a421fd477c4766dfca525732dbf1f082 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Sat, 13 Dec 2025 11:35:33 +0800 Subject: [PATCH] 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;