Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,944 Bytes
096584a ef22617 096584a ef22617 096584a c64e57c ef22617 096584a c64e57c 096584a 6a3d22f 096584a 7139c79 096584a 7139c79 |
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 |
import { v4 as uuidv4 } from "uuid"
import { RenderedScene, RenderRequest } from "../types.mts"
import { generateSeed } from "../utils/generateSeed.mts"
import { getValidNumber } from "../utils/getValidNumber.mts"
import { renderPipeline } from "./renderPipeline.mts"
const cache: Record<string, RenderedScene> = {}
const cacheQueue: string[] = []
const maxCacheSize = 1000
export async function renderScene(request: RenderRequest): Promise<RenderedScene> {
// const key = getCacheKey(scene)
const renderId = uuidv4()
request.nbFrames = getValidNumber(request.nbFrames, 1, 24, 16)
const isVideo = request?.nbFrames === 1
// important: we need a consistent seed for our multiple rendering passes
request.seed = getValidNumber(request.seed, 0, 2147483647, generateSeed())
request.nbSteps = getValidNumber(request.nbSteps, 5, 50, 10)
if (isVideo) {
request.width = getValidNumber(request.width, 256, 1024, 1024)
request.height = getValidNumber(request.height, 256, 1024, 512)
} else {
request.width = getValidNumber(request.width, 256, 1280, 576)
request.height = getValidNumber(request.height, 256, 720, 320)
}
const response: RenderedScene = {
renderId,
status: "pending",
assetUrl: "",
error: "",
maskUrl: "",
segments: []
}
cache[renderId] = response
cacheQueue.push(renderId)
if (cacheQueue.length > maxCacheSize) {
const toRemove = cacheQueue.shift()
delete cache[toRemove]
}
// this is a fire-and-forget asynchronous pipeline:
// we start it, but we do not await for the response
renderPipeline(request, response)
console.log("renderScene: yielding the scene", response)
return response
}
export async function getRenderedScene(renderId: string): Promise<RenderedScene> {
const rendered = cache[renderId]
if (!rendered) {
throw new Error(`couldn't find any rendered scene with renderId ${renderId}`)
}
return cache[renderId]
} |