Files
openclaw/src/music-generation/types.ts
2026-05-02 03:17:11 +01:00

92 lines
2.5 KiB
TypeScript

import type { AuthProfileStore } from "../agents/auth-profiles/types.js";
import type { OpenClawConfig } from "../config/types.openclaw.js";
import type { MediaNormalizationEntry } from "../media-generation/normalization.types.js";
export type MusicGenerationOutputFormat = "mp3" | "wav";
export type GeneratedMusicAsset = {
buffer: Buffer;
mimeType: string;
fileName?: string;
metadata?: Record<string, unknown>;
};
export type MusicGenerationSourceImage = {
url?: string;
buffer?: Buffer;
mimeType?: string;
fileName?: string;
metadata?: Record<string, unknown>;
};
type MusicGenerationProviderConfiguredContext = {
cfg?: OpenClawConfig;
agentDir?: string;
};
export type MusicGenerationRequest = {
provider: string;
model: string;
prompt: string;
cfg: OpenClawConfig;
agentDir?: string;
authStore?: AuthProfileStore;
timeoutMs?: number;
lyrics?: string;
instrumental?: boolean;
durationSeconds?: number;
format?: MusicGenerationOutputFormat;
inputImages?: MusicGenerationSourceImage[];
};
export type MusicGenerationResult = {
tracks: GeneratedMusicAsset[];
model?: string;
lyrics?: string[];
metadata?: Record<string, unknown>;
};
export type MusicGenerationIgnoredOverride = {
key: "lyrics" | "instrumental" | "durationSeconds" | "format";
value: string | boolean | number;
};
export type MusicGenerationMode = "generate" | "edit";
export type MusicGenerationModeCapabilities = {
maxTracks?: number;
maxDurationSeconds?: number;
supportsLyrics?: boolean;
supportsInstrumental?: boolean;
supportsDuration?: boolean;
supportsFormat?: boolean;
supportedFormats?: readonly MusicGenerationOutputFormat[];
supportedFormatsByModel?: Readonly<Record<string, readonly MusicGenerationOutputFormat[]>>;
};
export type MusicGenerationEditCapabilities = MusicGenerationModeCapabilities & {
enabled: boolean;
maxInputImages?: number;
};
export type MusicGenerationProviderCapabilities = MusicGenerationModeCapabilities & {
maxInputImages?: number;
generate?: MusicGenerationModeCapabilities;
edit?: MusicGenerationEditCapabilities;
};
export type MusicGenerationNormalization = {
durationSeconds?: MediaNormalizationEntry<number>;
};
export type MusicGenerationProvider = {
id: string;
aliases?: string[];
label?: string;
defaultModel?: string;
models?: string[];
capabilities: MusicGenerationProviderCapabilities;
isConfigured?: (ctx: MusicGenerationProviderConfiguredContext) => boolean;
generateMusic: (req: MusicGenerationRequest) => Promise<MusicGenerationResult>;
};