ManimCat / src /queues /processors /steps /render-step.ts
Bin29's picture
Sync from main: 68df783 feat: support multimodal studio reference images
d47b053
import { createLogger } from '../../../utils/logger'
import type { GenerationResult } from './analysis-step'
import type { OutputMode, VideoJobData } from '../../../types'
import { renderVideo } from './render-video'
import { renderImages } from './render-images'
import type { RenderResult } from './render-step-types'
const logger = createLogger('RenderStep')
export type { RenderResult } from './render-step-types'
export async function handlePreGeneratedCode(
jobId: string,
concept: string,
quality: string,
outputMode: OutputMode,
preGeneratedCode: string,
timings: Record<string, number>,
jobData: VideoJobData
): Promise<RenderResult> {
logger.info('Using pre-generated code from frontend', {
jobId,
outputMode,
codeLength: preGeneratedCode.length,
hasCustomApi: !!jobData.customApiConfig
})
const renderStart = Date.now()
const codeResult: GenerationResult = {
code: preGeneratedCode,
usedAI: false,
generationType: 'custom-api'
}
const renderResult =
outputMode === 'image'
? await renderImages(
jobId,
concept,
quality,
codeResult,
timings,
jobData.videoConfig,
jobData.customApiConfig,
jobData.promptOverrides,
undefined,
jobData.clientId,
jobData.workspaceDirectory,
jobData.renderCacheKey
)
: await renderVideo(
jobId,
concept,
quality,
codeResult,
timings,
jobData.customApiConfig,
jobData.videoConfig,
jobData.promptOverrides,
undefined,
jobData.clientId,
jobData.workspaceDirectory,
jobData.renderCacheKey
)
timings.render = Date.now() - renderStart
logger.info('Job completed (pre-generated code)', { jobId, outputMode, timings })
return renderResult
}
export { renderVideo, renderImages }