This commit is contained in:
jonathang4 2025-12-13 13:17:32 +08:00
parent c0b0a0a3bc
commit 1d278d7c65
5 changed files with 125 additions and 203 deletions

View File

@ -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),
},
},
}
} }

View File

@ -3,7 +3,7 @@ import _ from "lodash";
import APIException from "@/lib/exceptions/APIException.ts"; import APIException from "@/lib/exceptions/APIException.ts";
import EX from "@/api/consts/exceptions.ts"; import EX from "@/api/consts/exceptions.ts";
import util from "@/lib/util.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 logger from "@/lib/logger.ts";
import { ImagesTaskCache } from '@/api/ImagesTaskCache.ts'; import { ImagesTaskCache } from '@/api/ImagesTaskCache.ts';
@ -11,7 +11,9 @@ const DEFAULT_ASSISTANT_ID = "513695";
export const DEFAULT_MODEL = "jimeng-3.0"; export const DEFAULT_MODEL = "jimeng-3.0";
const DRAFT_VERSION = "3.0.2"; const DRAFT_VERSION = "3.0.2";
const MODEL_MAP = { const MODEL_MAP = {
"jimeng-4.5": "high_aes_general_v40l",
"jimeng-4.1": "high_aes_general_v41", "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.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b",
"jimeng-3.0": "high_aes_general_v30l: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", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L",
@ -34,11 +36,13 @@ export async function generateImages(
height = 1024, height = 1024,
sampleStrength = 0.5, sampleStrength = 0.5,
negativePrompt = "", negativePrompt = "",
generateCount = 4,
}: { }: {
width?: number; width?: number;
height?: number; height?: number;
sampleStrength?: number; sampleStrength?: number;
negativePrompt?: string; negativePrompt?: string;
generateCount?: number;
}, },
refreshToken: string refreshToken: string
) { ) {
@ -54,86 +58,114 @@ export async function generateImages(
await receiveCredit(refreshToken); await receiveCredit(refreshToken);
const componentId = util.uuid(); 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( const { aigc_data } = await request(
"post", "post",
"/mweb/v1/aigc_draft/generate", "/mweb/v1/aigc_draft/generate",
refreshToken, refreshToken,
{ options,
params: { // {
babi_param: encodeURIComponent( // params: {
JSON.stringify({ // babi_param: encodeURIComponent(
scenario: "image_video_generation", // JSON.stringify({
feature_key: "aigc_to_image", // scenario: "image_video_generation",
feature_entrance: "to_image", // feature_key: "aigc_to_image",
feature_entrance_detail: "to_image-" + model, // feature_entrance: "to_image",
}) // feature_entrance_detail: "to_image-" + model,
), // })
}, // ),
data: { // },
extend: { // data: {
root_model: model, // extend: {
template_id: "", // root_model: model,
}, // template_id: "",
submit_id: util.uuid(), // },
metrics_extra: JSON.stringify({ // submit_id: util.uuid(),
templateId: "", // metrics_extra: JSON.stringify({
generateCount: 1, // templateId: "",
promptSource: "custom", // generateCount: 1,
templateSource: "", // promptSource: "custom",
lastRequestId: "", // templateSource: "",
originRequestId: "", // lastRequestId: "",
}), // originRequestId: "",
draft_content: JSON.stringify({ // }),
type: "draft", // draft_content: JSON.stringify({
id: util.uuid(), // type: "draft",
min_version: DRAFT_VERSION, // id: util.uuid(),
is_from_tsn: true, // min_version: DRAFT_VERSION,
version: DRAFT_VERSION, // is_from_tsn: true,
main_component_id: componentId, // version: DRAFT_VERSION,
component_list: [ // main_component_id: componentId,
{ // component_list: [
type: "image_base_component", // {
id: componentId, // type: "image_base_component",
min_version: DRAFT_VERSION, // id: componentId,
generate_type: "generate", // min_version: DRAFT_VERSION,
aigc_mode: "workbench", // generate_type: "generate",
abilities: { // aigc_mode: "workbench",
type: "", // abilities: {
id: util.uuid(), // type: "",
generate: { // id: util.uuid(),
type: "", // generate: {
id: util.uuid(), // type: "",
core_param: { // id: util.uuid(),
type: "", // core_param: {
id: util.uuid(), // type: "",
model, // id: util.uuid(),
prompt, // model,
negative_prompt: negativePrompt, // prompt,
seed: Math.floor(Math.random() * 100000000) + 2500000000, // negative_prompt: negativePrompt,
sample_strength: sampleStrength, // seed: Math.floor(Math.random() * 100000000) + 2500000000,
image_ratio: 1, // sample_strength: sampleStrength,
large_image_info: { // image_ratio: 1,
type: "", // large_image_info: {
id: util.uuid(), // type: "",
height, // id: util.uuid(),
width, // height,
resolution_type: "1k", // width,
}, // resolution_type: "1k",
}, // },
history_option: { // },
type: "", // history_option: {
id: util.uuid(), // type: "",
}, // id: util.uuid(),
}, // },
}, // },
}, // },
], // },
}), // ],
http_common_info: { // }),
aid: Number(DEFAULT_ASSISTANT_ID), // http_common_info: {
}, // aid: Number(DEFAULT_ASSISTANT_ID),
}, // },
} // },
// }
); );
const historyId = aigc_data.history_record_id; const historyId = aigc_data.history_record_id;
if (!historyId) if (!historyId)

View File

@ -68,7 +68,8 @@ export default {
// .validate("body.negative_prompt", v => _.isUndefined(v) || _.isString(v)) // .validate("body.negative_prompt", v => _.isUndefined(v) || _.isString(v))
.validate("body.width", v => _.isUndefined(v) || _.isFinite(v)) .validate("body.width", v => _.isUndefined(v) || _.isFinite(v))
.validate("body.height", 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("body.response_format", v => _.isUndefined(v) || _.isString(v))
.validate("headers.authorization", _.isString); .validate("headers.authorization", _.isString);
// refresh_token切分 // refresh_token切分
@ -82,28 +83,31 @@ export default {
// negative_prompt: negativePrompt, // negative_prompt: negativePrompt,
width, width,
height, height,
// sample_strength: sampleStrength, sample_strength,
generate_count,
response_format, response_format,
} = request.body; } = request.body;
const responseFormat = _.defaultTo(response_format, "url"); 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) { if (USE_DATABASE_MODE) {
// 使用新的数据库方法 // 使用新的数据库方法
await DatabaseGenerationService.generateImagesV2(model||'jimeng-3.0', task_id, prompt, { await DatabaseGenerationService.generateImagesV2(model||'jimeng-3.0', task_id, prompt, {
width, width,
height, height,
sampleStrength: 0.5, sampleStrength: sample_strength || 0.5,
negativePrompt: "", negativePrompt: "",
response_format: responseFormat response_format: responseFormat,
generateCount: generate_count || 4,
}, token); }, token);
} else { } else {
// 使用原有方法(不等待结果) // 使用原有方法(不等待结果)
generateImages(model||'jimeng-3.0', task_id, prompt, { generateImages(model||'jimeng-3.0', task_id, prompt, {
width, width,
height, height,
sampleStrength: 0.5, sampleStrength: sample_strength || 0.5,
negativePrompt: "", negativePrompt: "",
generateCount: generate_count || 4,
}, token); }, token);
} }

View File

@ -45,6 +45,7 @@ export class DatabaseGenerationService {
sampleStrength?: number; sampleStrength?: number;
negativePrompt?: string; negativePrompt?: string;
response_format?: string; response_format?: string;
generateCount?: number;
}, },
refreshToken: string refreshToken: string
): Promise<void> { ): Promise<void> {
@ -74,7 +75,8 @@ export class DatabaseGenerationService {
height: params.height || 1024, height: params.height || 1024,
sample_strength: params.sampleStrength || 0.5, sample_strength: params.sampleStrength || 0.5,
negative_prompt: params.negativePrompt || "", negative_prompt: params.negativePrompt || "",
response_format: params.response_format response_format: params.response_format,
generate_count: params.generateCount || 4,
}, },
internal_params: { internal_params: {
refresh_token: refreshToken refresh_token: refreshToken

View File

@ -8,7 +8,7 @@ import logger from '@/lib/logger.js';
import TOSService from '@/lib/tos/tos-service.js'; import TOSService from '@/lib/tos/tos-service.js';
import { generateImages as originalGenerateImages } from '@/api/controllers/images.js'; import { generateImages as originalGenerateImages } from '@/api/controllers/images.js';
import { generateVideo as originalGenerateVideo } from '@/api/controllers/video.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"; import EX from "@/api/consts/exceptions.ts";
const timeZone = 'Asia/Shanghai'; const timeZone = 'Asia/Shanghai';
@ -774,7 +774,9 @@ export class TaskPollingService {
// 映射模型 // 映射模型
const MODEL_MAP = { const MODEL_MAP = {
"jimeng-4.5": "high_aes_general_v40l",
"jimeng-4.1": "high_aes_general_v41", "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.1": "high_aes_general_v30l_art_fangzhou:general_v3.0_18b",
"jimeng-3.0": "high_aes_general_v30l: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", "jimeng-2.1": "high_aes_general_v21_L:general_v2.1_L",