|
import { RenderedScene, RenderRequest } from "../types.mts" |
|
import { generateImageSDXLAsBase64 } from "../utils/generateImageSDXL.mts" |
|
import { generateImageSDXL360AsBase64 } from "../utils/generateImageSDXL360.mts" |
|
import { generateSeed } from "../utils/generateSeed.mts" |
|
|
|
export async function renderImage( |
|
request: RenderRequest, |
|
response: RenderedScene, |
|
): Promise<RenderedScene> { |
|
|
|
const isSpherical = request.projection === 'spherical' |
|
|
|
const generateImageAsBase64 = isSpherical |
|
? generateImageSDXL360AsBase64 |
|
: generateImageSDXLAsBase64 |
|
|
|
console.log(`going to generate an image using ${request.projection || "default (cartesian)"} projection`) |
|
|
|
const params = { |
|
positivePrompt: request.prompt, |
|
seed: request.seed, |
|
nbSteps: request.nbSteps, |
|
width: request.width, |
|
height: request.height |
|
} |
|
|
|
console.log(`calling generateImageAsBase64 with: `, JSON.stringify(params, null, 2)) |
|
|
|
|
|
|
|
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) { |
|
console.error(`failed to generate the image, although ${err}`) |
|
response.error = `failed to render scene: ${err}` |
|
response.status = "error" |
|
response.assetUrl = "" |
|
} |
|
} |
|
|
|
return response |
|
} |
|
|