Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,383 Bytes
096584a ef22617 096584a 44fe180 096584a c4b02b2 096584a 44fe180 096584a 6a3d22f 096584a 7139c79 096584a 44fe180 |
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 |
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"
import { getValidBoolean } from "../utils/getValidBoolean.mts"
const cache: Record<string, RenderedScene> = {}
const cacheQueue: string[] = []
const maxCacheSize = 2000
export async function renderScene(request: RenderRequest): Promise<RenderedScene> {
// const key = getCacheKey(scene)
const renderId = uuidv4()
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]
}
|