jimeng-web-mcp
Version:
MCP服务器项目,直接访问即梦AI Web端进行图像和视频生成(仅供学习研究使用)
637 lines (619 loc) • 17.6 kB
text/typescript
/**
* 主体参考视频生成参数
*/
interface MainReferenceVideoParams {
referenceImages: string[];
prompt: string;
model?: string;
resolution?: '720p' | '1080p';
videoAspectRatio?: '21:9' | '16:9' | '4:3' | '1:1' | '3:4' | '9:16';
fps?: number;
duration?: number;
refresh_token?: string;
}
/**
* API相关类型定义
* 从api.ts中提取的所有API相关的接口和类型
*/
/**
* 图像生成参数
*/
interface ImageGenerationParams {
filePath?: string[];
model?: string;
prompt: string;
aspectRatio?: string;
sample_strength?: number;
negative_prompt?: string;
refresh_token?: string;
req_key?: string;
blend_mode?: 'single' | 'multi';
reference_strength?: number[];
count?: number;
/**
* 是否异步模式
* - false (默认): 同步等待生成完成,返回图片URL数组
* - true: 立即返回historyId,不等待完成
*/
async?: boolean;
/**
* 多帧场景描述数组
* - 最多15个元素
* - 非空字符串才有效
* - 会与prompt组合成最终提示词
*
* @example
* frames: ["实验室场景", "时空隧道", "外星球"]
* 最终prompt: "{prompt} 实验室场景 时空隧道 外星球,一共3张图"
*/
frames?: string[];
}
/**
* 多帧配置
*/
interface MultiFrameConfig {
idx: number;
duration_ms: number;
prompt: string;
image_path: string;
}
/**
* 视频生成参数
*/
interface VideoGenerationParams {
filePath?: string[];
model?: string;
prompt: string;
refresh_token?: string;
req_key?: string;
resolution?: string;
multiFrames?: MultiFrameConfig[];
duration_ms?: number;
fps?: number;
video_aspect_ratio?: string;
}
/**
* 视频后处理基础参数
*/
interface VideoPostProcessParams {
videoId: string;
originHistoryId: string;
refresh_token?: string;
}
/**
* 帧插值参数
*/
interface FrameInterpolationParams extends VideoPostProcessParams {
targetFps: 30 | 60;
originFps: number;
duration?: number;
}
/**
* 超分辨率参数
*/
interface SuperResolutionParams extends VideoPostProcessParams {
targetWidth: number;
targetHeight: number;
originWidth: number;
originHeight: number;
}
/**
* 音效生成参数
*/
interface AudioEffectGenerationParams extends VideoPostProcessParams {
}
/**
* 统一视频后处理参数
*/
interface VideoPostProcessUnifiedParams {
operation: 'frame_interpolation' | 'super_resolution' | 'audio_effect';
videoId: string;
originHistoryId: string;
refresh_token?: string;
targetFps?: 30 | 60;
originFps?: number;
targetWidth?: number;
targetHeight?: number;
originWidth?: number;
originHeight?: number;
duration?: number;
}
/**
* 宽高比预设选项 - 使用API官方预定义尺寸
*/
interface AspectRatioPreset {
name: string;
ratio: number;
displayName: string;
imageRatio: number;
width: number;
height: number;
resolutionType: string;
}
/**
* 宽高比预设列表 - 基于JiMeng API官方预定义的8种尺寸
* 对应API返回的 image_ratio_sizes 数组
*/
declare const ASPECT_RATIO_PRESETS: AspectRatioPreset[];
interface DimensionInfo {
width: number;
height: number;
resolutionType: string;
}
declare class ImageDimensionCalculator {
static calculateDimensions(aspectRatio?: string, width?: number, height?: number): DimensionInfo;
private static getResolutionType;
static getAspectRatioPreset(name: string): AspectRatioPreset | undefined;
static getAspectRatioByName(ratioName: string): number;
}
/**
* JimengClient - 重构后的主客户端(组合模式)
*
* 架构变更:
* - 移除 extends BaseClient 继承
* - 使用组合模式:注入 HttpClient, ImageUploader, NewCreditService, VideoService
* - 保持所有现有API签名不变(100%向后兼容)
* - 旧方法静默重定向到新方法(无警告)
*/
/**
* JimengClient - 组合模式实现
*/
declare class NewJimengClient {
private httpClient;
private imageUploader;
private creditService;
private videoService;
private promptValidator;
constructor(token?: string);
/**
* 图片生成(保持100%向后兼容)
* 支持继续生成功能(>4张自动触发)
*/
generateImage(params: ImageGenerationParams & {
async: true;
}): Promise<string>;
generateImage(params: ImageGenerationParams & {
async?: false;
}): Promise<string[]>;
/**
* 异步提交图像生成任务
*/
generateImageAsync(params: ImageGenerationParams): Promise<string>;
/**
* 查询图像/视频生成结果
* 自动判断ID类型:UUID格式使用submit_ids,数字格式使用history_ids
*/
getImageResult(historyId: string): Promise<any>;
/**
* 批量查询任务结果(真正的批量API)
* 自动按ID类型分组:图片用history_ids,视频用submit_ids
*/
getBatchResults(ids: string[]): Promise<Record<string, any>>;
/**
* 解析查询结果(提取公共逻辑)
*/
private parseQueryResult;
/**
* 执行同步继续生成(用于同步模式)
* 发送一次继续生成确认,告诉 API 继续完成所有剩余图片
* 不等待完成,让调用者继续轮询原始 historyId
*/
private performSyncContinueGeneration;
/**
* 执行异步继续生成(智能继续生成核心方法)
* [CONSTITUTION-EXCEPTION: Tech Debt] 重构以使用CacheManager
*/
private performAsyncContinueGeneration;
/**
* 旧视频生成API(向后兼容,静默重定向)
*/
generateVideo(params: VideoGenerationParams): Promise<string>;
/**
* 文生视频(新API)
*/
generateTextToVideo(params: any): Promise<any>;
/**
* 多帧视频(新API)
*/
generateMultiFrameVideo(params: any): Promise<any>;
/**
* 主参考视频(新API)
*/
generateMainReferenceVideo(params: MainReferenceVideoParams): Promise<string>;
/**
* 主参考视频(统一API)
*/
generateMainReferenceVideoUnified(params: any): Promise<any>;
/**
* 查询视频生成结果(单个)
*/
queryVideoResult(submitId: string): Promise<any>;
/**
* 批量查询视频生成结果
*/
queryVideoResults(submitIds: string[]): Promise<Record<string, any>>;
/**
* 视频后处理(帧插值、超分辨率、音效)
*/
videoPostProcess(params: any): Promise<any>;
/**
* 帧插值(视频后处理)
*/
frameInterpolation(params: any): Promise<string>;
/**
* 超分辨率(视频后处理)
*/
superResolution(params: any): Promise<string>;
/**
* 音效生成(视频后处理)
*/
generateAudioEffect(params: any): Promise<string>;
/**
* 获取积分
*/
getCredits(): Promise<number>;
/**
* 获取详细积分信息
*/
getCredit(): Promise<any>;
/**
* 领取积分
*/
receiveCredit(): Promise<void>;
/**
* 提交图片生成任务
*
* [CONSTITUTION-EXCEPTION: Tech Debt] 重构以使用CacheManager
* @param apiParams - API parameters for request
* @param originalParams - Optional original user parameters (for cache)
* @param uploadedImages - Optional uploaded images (for cache)
*/
private submitImageTask;
/**
* 构建初始请求参数(首次生成)
*
* [CONSTITUTION-EXCEPTION: Tech Debt] 提取自submitImageTask方法以降低复杂度
* @param params - API parameters
*/
private buildInitialRequest;
/**
* 构建继续生成请求参数
*
* [CONSTITUTION-EXCEPTION: Tech Debt] 提取自submitImageTask方法以降低复杂度
*/
private buildContinuationRequest;
/**
* 构建abilities结构
*/
private buildAbilities;
/**
* 等待图片生成完成
* 注意:缓存清理延迟到 generateImage 末尾,以支持手动继续生成
*
* @returns { imageUrls, totalCount, isPartial }
* - imageUrls: 已生成的图片URL数组
* - totalCount: API返回的总目标数量
* - isPartial: 是否为部分完成(需要继续生成)
*/
private waitForImageCompletion;
/**
* 睡眠函数
*/
private sleep;
/**
* 验证并过滤frames数组(与旧代码一致)
*/
private validateAndFilterFrames;
/**
* 构建包含frames的最终prompt(与旧代码一致)
*/
private buildPromptWithFrames;
/**
* 获取refresh token
*/
getRefreshToken(): string;
}
/**
* HttpClient - HTTP请求客户端
* 整合auth.ts和a_bogus.ts中的认证逻辑
* 提供统一的HTTP请求接口
*/
interface RequestOptions {
url: string;
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
data?: any;
headers?: Record<string, string>;
params?: Record<string, any>;
timeout?: number;
}
/**
* HttpClient类
* 使用组合模式,独立于继承体系
*/
declare class HttpClient {
private refreshToken;
constructor(token?: string);
/**
* 执行HTTP请求
*/
request<T = any>(options: RequestOptions): Promise<T>;
/**
* 生成请求认证参数(用于图片上传等)
*/
generateRequestParams(): any;
/**
* 生成认证头和签名(用于ImageX API)
*/
generateAuthorizationAndHeader(accessKeyId: string, secretAccessKey: string, sessionToken: string, region: string, service: string, method: string, params?: Record<string, any>, data?: Record<string, any>): Promise<Record<string, string>>;
/**
* 生成Authorization签名(完整AWS4-HMAC-SHA256算法)
*/
private generateAuthorization;
/**
* 构建规范化的请求头字符串
*/
private buildCanonicalHeaders;
/**
* 构建已签名的请求头列表
*/
private buildSignedHeaders;
/**
* HTTP查询字符串构建
*/
httpBuildQuery(params: Record<string, any>): string;
/**
* 生成随机字符串
*/
generateRandomString(length: number): string;
/**
* 获取refresh token
*/
getRefreshToken(): string;
/**
* 统一错误处理
*/
private handleError;
}
/**
* ImageUploader - 图片上传服务
* 使用image-size库替代手动解析(删除132行代码)
* 提供图片上传、格式检测和批量上传功能
* 支持图片上传步骤的自动重试机制
*/
interface UploadResult {
uri: string;
originalPath: string;
width: number;
height: number;
format: string;
}
interface ImageMetadata {
format: 'png' | 'jpeg' | 'jpg' | 'webp' | 'gif';
width: number;
height: number;
}
/**
* ImageUploader类
* 使用组合模式,依赖HttpClient而非继承
*/
declare class ImageUploader {
private httpClient;
constructor(httpClient: HttpClient);
/**
* 上传单张图片
*/
upload(imagePath: string): Promise<UploadResult>;
/**
* 批量上传图片(并行处理)
*/
uploadBatch(imagePaths: string[]): Promise<UploadResult[]>;
/**
* 检测图片格式和尺寸(使用image-size库,替代132行手动解析)
*/
detectFormat(pathOrBuffer: string | Buffer): ImageMetadata;
/**
* 读取文件内容(支持本地文件和HTTP URL)
*/
private getFileContent;
/**
* 上传图片数据(带重试机制)
* 这是唯一需要重试的步骤,因为网络传输最容易失败
*/
private uploadImageDataWithRetry;
/**
* 获取上传凭证
*/
private getUploadAuth;
}
/**
* VideoService - 统一视频生成服务
* 合并4个独立生成器的功能(TextToVideo, MultiFrame, MainReference)
* 内联轮询逻辑(≤30行),移除timeout.ts依赖
* 使用组合模式,依赖HttpClient和ImageUploader
*/
interface VideoResult {
videoUrl?: string;
taskId?: string;
metadata: {
model: string;
resolution: string;
duration: number;
fps: number;
};
}
interface TextToVideoParams {
prompt: string;
model?: string;
resolution?: '720p' | '1080p';
fps?: number;
duration?: number;
async?: boolean;
firstFrameImage?: string;
lastFrameImage?: string;
videoAspectRatio?: string;
}
interface FrameConfig {
idx: number;
imagePath: string;
duration_ms: number;
prompt: string;
}
interface MultiFrameParams {
frames: FrameConfig[];
model?: string;
resolution?: '720p' | '1080p';
fps?: number;
async?: boolean;
videoAspectRatio?: string;
}
interface MainReferenceParams {
referenceImages: string[];
prompt: string;
model?: string;
resolution?: '720p' | '1080p';
fps?: number;
duration?: number;
async?: boolean;
videoAspectRatio?: string;
}
/**
* VideoService类
* 整合所有视频生成功能
*/
declare class VideoService {
private httpClient;
private imageUploader;
constructor(httpClient: HttpClient, imageUploader: ImageUploader);
/**
* 文本生成视频(支持首尾帧)
*/
generateTextToVideo(params: TextToVideoParams): Promise<VideoResult>;
/**
* 生成UUID(本地方法)
*/
private generateUuid;
/**
* 多帧视频生成(2-10帧)
*/
generateMultiFrame(params: MultiFrameParams): Promise<VideoResult>;
/**
* 主参考视频生成(2-4张参考图)
*/
generateMainReference(params: MainReferenceParams): Promise<VideoResult>;
/**
* 上传多个帧图片
*/
private uploadFrames;
/**
* 提交draft格式的视频生成任务
*/
private submitTaskWithDraft;
/**
* 轮询直到任务完成(内联实现,≤30行)
*/
private pollUntilComplete;
/**
* 检查任务状态
*/
private checkTaskStatus;
/**
* 深度搜索对象中的URL字段
*/
private deepSearchUrl;
/**
* 睡眠函数
*/
private sleep;
/**
* 查询视频生成结果(单个)
*/
queryVideo(submitId: string): Promise<any>;
/**
* 批量查询视频生成结果
*/
queryVideoBatch(submitIds: string[]): Promise<Record<string, any>>;
/**
* 解析主参考提示词(提取[图N]引用)
*/
private parseMainReferencePrompt;
/**
* 构建idip_meta_list(主参考模式参数)
* 正确格式参考: generate_zhuti_request.json
*/
private buildIdipMetaList;
}
/**
* CreditService - 积分管理服务
* 使用组合模式,依赖HttpClient而非继承
* 负责积分查询和领取功能
*/
interface CreditInfo {
giftCredit: number;
purchaseCredit: number;
vipCredit: number;
totalCredit: number;
}
/**
* CreditService类(新版本 - 组合模式)
*/
declare class NewCreditService {
private httpClient;
constructor(httpClient: HttpClient);
/**
* 获取积分余额
*/
getBalance(): Promise<number>;
/**
* 获取详细积分信息
*/
getCredit(): Promise<CreditInfo>;
/**
* 领取积分
*/
receiveCredit(): Promise<void>;
/**
* 检查是否有足够积分
*/
hasEnoughCredits(amount: number): Promise<boolean>;
/**
* 扣除积分(记录原因)
*/
deductCredits(amount: number, reason: string): Promise<void>;
}
/**
* JiMeng MCP API - 重构后的主入口文件
*
* 📁 此文件已重构为模块化架构,原2800+行代码被拆分为以下模块:
* - src/types/api.types.ts - API类型定义 (200行)
* - src/types/models.ts - 模型映射和常量 (80行)
* - src/api/ApiClient.ts - 基础API客户端 (90行)
* - src/api/CreditService.ts - 积分服务 (40行)
* - src/api/JimengClient.ts - 统一客户端 (400行)
* - src/utils/auth.ts - 认证工具 (200行)
* - src/utils/dimensions.ts - 尺寸计算工具 (已存在)
*
* ✅ 保持完全向后兼容 - 所有现有代码无需修改即可正常工作
* 🔄 如遇问题,可使用 api-original-backup.ts 作为备用方案
*/
declare const getApiClient: (token?: string) => NewJimengClient;
/**
* 图像生成 - 统一接口,支持同步和异步模式
* ✨ 支持所有新特性:单图参考、多图参考、Draft-based响应、creation_agent模式、多帧场景描述
*/
declare function generateImage(params: ImageGenerationParams & {
async: true;
}): Promise<string>;
declare function generateImage(params: ImageGenerationParams & {
async?: false;
}): Promise<string[]>;
/**
* 视频生成 - 与原API完全兼容
* ✨ 支持传统模式和智能多帧模式
*/
declare const generateVideo: (params: VideoGenerationParams) => Promise<string>;
declare function frameInterpolation(params: FrameInterpolationParams): Promise<string>;
declare function superResolution(params: SuperResolutionParams): Promise<string>;
declare function generateAudioEffect(params: AudioEffectGenerationParams): Promise<string>;
declare function videoPostProcess(params: VideoPostProcessUnifiedParams): Promise<string>;
export { ASPECT_RATIO_PRESETS, HttpClient, ImageDimensionCalculator, ImageUploader, NewJimengClient as JimengClient, NewCreditService, VideoService, frameInterpolation, generateAudioEffect, generateImage, generateVideo, getApiClient, superResolution, videoPostProcess };