|
import { v4 as uuidv4 } from "uuid" |
|
|
|
|
|
|
|
import { VideoSequence, VideoShot, VideoShotMeta } from "../types.mts" |
|
import { generateSeed } from "./generateSeed.mts" |
|
import { getValidNumber } from "./getValidNumber.mts" |
|
import { shotFormatVersion } from "../config.mts" |
|
|
|
export const parseShotRequest = async (sequence: VideoSequence, maybeShotMeta: Partial<VideoShotMeta>): Promise<VideoShot> => { |
|
|
|
|
|
const id = uuidv4() |
|
|
|
const shot: VideoShot = { |
|
id, |
|
sequenceId: sequence.id, |
|
ownerId: sequence.ownerId, |
|
|
|
shotPrompt: `${maybeShotMeta.shotPrompt || ""}`, |
|
|
|
|
|
environmentPrompt: `${maybeShotMeta.environmentPrompt || ""}`, |
|
|
|
|
|
photographyPrompt: `${maybeShotMeta.photographyPrompt || ""}`, |
|
|
|
|
|
actionPrompt: `${maybeShotMeta.actionPrompt || ""}`, |
|
|
|
|
|
backgroundAudioPrompt: `${maybeShotMeta.backgroundAudioPrompt || ""}`, |
|
|
|
|
|
foregroundAudioPrompt: `${maybeShotMeta.foregroundAudioPrompt || maybeShotMeta.shotPrompt || ""}`, |
|
|
|
|
|
actorPrompt: `${maybeShotMeta.actorPrompt || ""}`, |
|
|
|
|
|
actorVoicePrompt: `${maybeShotMeta.actorVoicePrompt || ""}`, |
|
|
|
|
|
actorDialoguePrompt: `${maybeShotMeta.actorDialoguePrompt || ""}`, |
|
|
|
|
|
seed: getValidNumber(maybeShotMeta.seed, 0, 2147483647, generateSeed()), |
|
|
|
|
|
noise: sequence.noise, |
|
noiseAmount: sequence.noiseAmount, |
|
|
|
|
|
durationMs: getValidNumber(maybeShotMeta.durationMs, 0, 6000, 3000), |
|
|
|
|
|
steps: getValidNumber(maybeShotMeta.steps || sequence.steps, 10, 50, 45), |
|
|
|
|
|
fps: getValidNumber(sequence.fps, 8, 60, 30), |
|
|
|
|
|
resolution: sequence.resolution, |
|
|
|
|
|
introTransition: 'fade', |
|
introDurationMs: 500, |
|
|
|
|
|
|
|
version: shotFormatVersion, |
|
fileName: `${sequence.ownerId}_${sequence.id}_${id}.mp4`, |
|
hasGeneratedPreview: false, |
|
hasGeneratedVideo: false, |
|
hasUpscaledVideo: false, |
|
hasGeneratedBackgroundAudio: false, |
|
hasGeneratedForegroundAudio: false, |
|
hasGeneratedActor: false, |
|
hasInterpolatedVideo: false, |
|
hasAddedAudio: false, |
|
hasPostProcessedVideo: false, |
|
nbCompletedSteps: 0, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nbTotalSteps: 5, |
|
progressPercent: 0, |
|
createdAt: new Date().toISOString(), |
|
completedAt: '', |
|
completed: false, |
|
error: '', |
|
} |
|
|
|
return shot |
|
} |