Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,817 Bytes
30c1ba0 955ce73 096584a 1373ff5 096584a 5b3357c 096584a eff8217 5b3357c 1373ff5 5b3357c 096584a 39166f8 096584a b785e1d 1373ff5 096584a cd6d879 096584a 39166f8 096584a bdccaf0 096584a 39166f8 096584a 39166f8 096584a 39166f8 096584a bdccaf0 30c1ba0 bdccaf0 096584a |
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 |
import { generateImageSDXLAsBase64 } from "../providers/image-generation/generateImageSDXLGradio.mts"
import { generateImageSDXL360AsBase64 } from "../providers/image-generation/generateImageSDXL360.mts"
import { RenderedScene, RenderRequest } from "../types.mts"
import { generateImagePulibAsBase64 } from "../providers/image-generation/generateImagePulib.mts"
export async function renderImage(
request: RenderRequest,
response: RenderedScene,
): Promise<RenderedScene> {
const isSpherical = request.projection === 'spherical'
// we don't want to switch too much between model types in VideoChain,
// because for speed we need to pre-load the servers,
// but there is no point in pre-loading many servers for many models
const generateImageAsBase64 = isSpherical
? generateImageSDXL360AsBase64
: request.turbo
// turbo models are models that are slightly less beautiful
// but much, much faster to run
// for the moment we use SDXL + LCM, as it offers better scene coherence,
// but we might switch to SDXL Turbo in the future if its quality improves
? generateImagePulibAsBase64 // generateImageSDXLTurboAsBase64
: generateImageSDXLAsBase64
// console.log(`going to generate an image using ${request.projection || "default (cartesian)"} projection`)
const params = {
positivePrompt: request.prompt,
negativePrompt: request.negativePrompt,
identityImage: request.identityImage,
seed: request.seed,
nbSteps: request.nbSteps,
width: request.width,
height: request.height
}
// console.log(`calling generateImageAsBase64 with: `, JSON.stringify(params, null, 2))
// we try at least 3 different servers
try {
response.assetUrl = await generateImageAsBase64(params)
// console.log("successful generation!", response.assetUrl.slice(0, 30))
if (!response.assetUrl?.length) {
throw new Error(`the generated image is empty`)
}
} catch (err) {
// console.error(`failed to render.. but let's try again!`)
try {
response.assetUrl = await generateImageAsBase64(params)
// console.log("successful generation!", response.assetUrl.slice(0, 30))
if (!response.assetUrl?.length) {
throw new Error(`the generated image is empty`)
}
} catch (err) {
try {
response.assetUrl = await generateImageAsBase64(params)
// console.log("successful generation!", response.assetUrl.slice(0, 30))
if (!response.assetUrl?.length) {
throw new Error(`the generated image is empty`)
}
} catch (err) {
// console.error(`failed to generate the image, due to`, err)
response.error = `failed to render scene: ${err}`
response.status = "error"
response.assetUrl = ""
}
}
}
return response
}
|