Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 3,227 Bytes
5fb05e6 c5b0dde 5fb05e6 c5b0dde 5fb05e6 5dfc565 5fb05e6 c5b0dde 5fb05e6 c5b0dde 5dfc565 5fb05e6 c5b0dde 7bea24d c5b0dde 7bea24d 5fb05e6 5dfc565 5fb05e6 5dfc565 5fb05e6 5dfc565 5fb05e6 5dfc565 5fb05e6 7bea24d 5fb05e6 7bea24d 5fb05e6 7bea24d 5fb05e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
import { v4 as uuidv4 } from "uuid"
import { HfInference } from "@huggingface/inference"
// convert a request (which might be invalid)
import { VideoTaskRequest, VideoTask, VideoShotMeta } from "../types.mts"
import { getValidNumber } from "./getValidNumber.mts"
import { getValidResolution } from "./getValidResolution.mts"
import { parseShotRequest } from "./parseShotRequest.mts"
import { generateSeed } from "./generateSeed.mts"
import { sequenceFormatVersion } from "../config.mts"
// const hfi = new HfInference(process.env._VC_HF_API_TOKEN)
// const hf = hfi.endpoint(process.env.VC_INFERENCE_ENDPOINT_URL)
export const parseVideoRequest = async (request: VideoTaskRequest): Promise<VideoTask> => {
// we don't want people to input their own ID or we might have trouble,
// such as people attempting to use a non-UUID, a file path (to hack us), etc
const id = uuidv4()
if (typeof request.prompt === "string" && request.prompt.length > 0) {
console.log("we have a valid prompt:", request.prompt)
// TODO: use llama2 to populate this!
request.sequence = {
videoPrompt: request.prompt,
}
request.shots = [{
shotPrompt: request.prompt,
}]
}
console.log("continuing..")
const task: VideoTask = {
// ------------ VideoSequenceMeta -------------
id,
// describe the whole movie
videoPrompt: `${request.sequence.videoPrompt || ''}`,
// describe the background audio (crowd, birds, wind, sea etc..)
backgroundAudioPrompt: `${request.sequence.backgroundAudioPrompt || ''}`,
// describe the foreground audio (cars revving, footsteps, objects breaking, explosion etc)
foregroundAudioPrompt: `${request.sequence.foregroundAudioPrompt || ''}`,
// describe the main actor visible in the shot (optional)
actorPrompt: `${request.sequence.actorPrompt || ''}`,
// describe the main actor voice (man, woman, old, young, amused, annoyed.. etc)
actorVoicePrompt: `${request.sequence.actorVoicePrompt || ''}`,
// describe the main actor dialogue line
actorDialoguePrompt: `${request.sequence.actorDialoguePrompt || ''}`,
seed: getValidNumber(request.sequence.seed, 0, 4294967295, generateSeed()),
noise: request.sequence.noise === true,
steps: getValidNumber(request.sequence.steps, 10, 50, 35),
fps: getValidNumber(request.sequence.fps, 8, 60, 24),
resolution: getValidResolution(request.sequence.resolution),
outroTransition: 'staticfade',
outroDurationMs: 3000,
// ---------- VideoSequenceData ---------
version: sequenceFormatVersion,
fileName: `${id}.mp4`,
hasAssembledVideo: false,
nbCompletedShots: 0,
progressPercent: 0,
completedAt: null,
completed: false,
error: '',
// ------- the VideoShot -----
shots: [],
}
console.log("we are still good..")
const maybeShots = Array.isArray(request.shots) ? request.shots : []
console.log("let's try..")
for (const maybeShot of maybeShots) {
console.log("trying shot", maybeShot)
try {
const shot = await parseShotRequest(task, maybeShot)
task.shots.push(shot)
} catch (err) {
console.log(`error parsing shot: `, maybeShot)
}
}
return task
} |