File size: 1,730 Bytes
096584a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cd6d879
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
import { RenderedScene, RenderRequest } from "../types.mts"
import { generateImageSDXLAsBase64 } from "../utils/generateImageSDXL.mts"
import { generateImageSDXL360AsBase64 } from "../utils/generateImageSDXL360.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))


  // first we generate a quick low quality version
  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
}