jbilcke-hf HF Staff commited on
Commit
6a3d22f
·
1 Parent(s): cd6d879

bake the data uri directly in the maskUrl field

Browse files
src/index.mts CHANGED
@@ -52,7 +52,7 @@ app.post("/render", async (req, res) => {
52
  renderId: "",
53
  status: "pending",
54
  assetUrl: "",
55
- maskBase64: "",
56
  error: "",
57
  segments: []
58
  }
@@ -103,7 +103,7 @@ app.get("/render/:renderId", async (req, res) => {
103
  status: "pending",
104
  assetUrl: "",
105
  error: "",
106
- maskBase64: "",
107
  segments: []
108
  }
109
 
@@ -145,7 +145,7 @@ app.post("/segment", async (req, res) => {
145
 
146
  let result: RenderedScene = {
147
  assetUrl: "",
148
- maskBase64: "",
149
  error: "",
150
  segments: []
151
  }
 
52
  renderId: "",
53
  status: "pending",
54
  assetUrl: "",
55
+ maskUrl: "",
56
  error: "",
57
  segments: []
58
  }
 
103
  status: "pending",
104
  assetUrl: "",
105
  error: "",
106
+ maskUrl: "",
107
  segments: []
108
  }
109
 
 
145
 
146
  let result: RenderedScene = {
147
  assetUrl: "",
148
+ maskUrl: "",
149
  error: "",
150
  segments: []
151
  }
src/production/renderImage.mts CHANGED
@@ -1,7 +1,6 @@
1
  import { RenderedScene, RenderRequest } from "../types.mts"
2
  import { generateImageSDXLAsBase64 } from "../utils/generateImageSDXL.mts"
3
  import { generateImageSDXL360AsBase64 } from "../utils/generateImageSDXL360.mts"
4
- import { generateSeed } from "../utils/generateSeed.mts"
5
 
6
  export async function renderImage(
7
  request: RenderRequest,
 
1
  import { RenderedScene, RenderRequest } from "../types.mts"
2
  import { generateImageSDXLAsBase64 } from "../utils/generateImageSDXL.mts"
3
  import { generateImageSDXL360AsBase64 } from "../utils/generateImageSDXL360.mts"
 
4
 
5
  export async function renderImage(
6
  request: RenderRequest,
src/production/renderImageSegmentation.mts CHANGED
@@ -33,7 +33,7 @@ export async function renderImageSegmentation(
33
  console.log("got the first frame! segmenting..")
34
  try {
35
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
36
- response.maskBase64 = result.pngInBase64
37
  response.segments = result.segments
38
 
39
  console.log(`it worked the first time! got ${response.segments.length} segments`)
@@ -41,7 +41,7 @@ export async function renderImageSegmentation(
41
  console.log("this takes too long :/ trying another server..")
42
  try {
43
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
44
- response.maskBase64 = result.pngInBase64
45
  response.segments = result.segments
46
 
47
  console.log(`it worked the second time! got ${response.segments.length} segments`)
@@ -49,7 +49,7 @@ export async function renderImageSegmentation(
49
  console.log("trying one last time, on a 3rd server..")
50
  try {
51
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
52
- response.maskBase64 = result.pngInBase64
53
  response.segments = result.segments
54
 
55
  console.log(`it worked the third time! got ${response.segments.length} segments`)
 
33
  console.log("got the first frame! segmenting..")
34
  try {
35
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
36
+ response.maskUrl = result.maskUrl
37
  response.segments = result.segments
38
 
39
  console.log(`it worked the first time! got ${response.segments.length} segments`)
 
41
  console.log("this takes too long :/ trying another server..")
42
  try {
43
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
44
+ response.maskUrl = result.maskUrl
45
  response.segments = result.segments
46
 
47
  console.log(`it worked the second time! got ${response.segments.length} segments`)
 
49
  console.log("trying one last time, on a 3rd server..")
50
  try {
51
  const result = await segmentImage(tmpImageFilePath, actionnables, request.width, request.height)
52
+ response.maskUrl = result.maskUrl
53
  response.segments = result.segments
54
 
55
  console.log(`it worked the third time! got ${response.segments.length} segments`)
src/production/renderScene.mts CHANGED
@@ -34,7 +34,7 @@ export async function renderScene(request: RenderRequest): Promise<RenderedScene
34
  status: "pending",
35
  assetUrl: "",
36
  error: "",
37
- maskBase64: "",
38
  segments: []
39
  }
40
 
 
34
  status: "pending",
35
  assetUrl: "",
36
  error: "",
37
+ maskUrl: "",
38
  segments: []
39
  }
40
 
src/production/renderVideoSegmentation.mts CHANGED
@@ -9,7 +9,7 @@ export async function renderVideoSegmentation(
9
  request: RenderRequest,
10
  response: RenderedScene
11
  ): Promise<RenderedScene> {
12
-
13
  const actionnables = Array.isArray(request.actionnables) ? request.actionnables : []
14
 
15
  if (actionnables.length > 0) {
@@ -28,7 +28,7 @@ export async function renderVideoSegmentation(
28
  } else {
29
  console.log("got the first frame! segmenting..")
30
  const result = await segmentImage(firstFrameFilePath, actionnables, request.width, request.height)
31
- response.maskBase64 = result.pngInBase64
32
  response.segments = result.segments
33
 
34
  // console.log("success!", { segments })
 
9
  request: RenderRequest,
10
  response: RenderedScene
11
  ): Promise<RenderedScene> {
12
+
13
  const actionnables = Array.isArray(request.actionnables) ? request.actionnables : []
14
 
15
  if (actionnables.length > 0) {
 
28
  } else {
29
  console.log("got the first frame! segmenting..")
30
  const result = await segmentImage(firstFrameFilePath, actionnables, request.width, request.height)
31
+ response.maskUrl = result.maskUrl
32
  response.segments = result.segments
33
 
34
  // console.log("success!", { segments })
src/types.mts CHANGED
@@ -321,7 +321,7 @@ export interface RenderedScene {
321
  status: RenderedSceneStatus
322
  assetUrl: string
323
  error: string
324
- maskBase64: string
325
  segments: ImageSegment[]
326
  }
327
 
 
321
  status: RenderedSceneStatus
322
  assetUrl: string
323
  error: string
324
+ maskUrl: string
325
  segments: ImageSegment[]
326
  }
327
 
src/utils/resizeBase64Image.mts CHANGED
@@ -12,5 +12,5 @@ export async function resizeBase64Image(imgBase64: string, targetWidth: number,
12
  // Convert the buffer back to base64
13
  const resizedImageBase64 = resizedBuffer.toString('base64');
14
 
15
- return resizedImageBase64;
16
  }
 
12
  // Convert the buffer back to base64
13
  const resizedImageBase64 = resizedBuffer.toString('base64');
14
 
15
+ return `data:image/png;base64,${resizedImageBase64}`
16
  }
src/utils/segmentImage.mts CHANGED
@@ -22,7 +22,7 @@ export async function segmentImage(
22
  width: number,
23
  height: number,
24
  ): Promise<{
25
- pngInBase64: string
26
  segments: ImageSegment[]
27
  }> {
28
 
@@ -64,7 +64,7 @@ export async function segmentImage(
64
  timeout: 40000, // we keep it tight, to fail early
65
  })
66
 
67
- const maskUrl = await page.$$eval('img[data-testid="detailed-image"]', el => el.map(x => x.getAttribute("src"))[0])
68
 
69
  let segments: ImageSegment[] = []
70
 
@@ -78,12 +78,12 @@ export async function segmentImage(
78
  // const tmpMaskFileName = `${uuidv4()}.png`
79
  // await downloadFileToTmp(maskUrl, tmpMaskFileName)
80
 
81
- const rawPngInBase64 = await downloadImageAsBase64(maskUrl)
82
 
83
- const pngInBase64 = await resizeBase64Image(rawPngInBase64, width, height)
84
 
85
  return {
86
- pngInBase64,
87
  segments,
88
  }
89
  } catch (err) {
 
22
  width: number,
23
  height: number,
24
  ): Promise<{
25
+ maskUrl: string
26
  segments: ImageSegment[]
27
  }> {
28
 
 
64
  timeout: 40000, // we keep it tight, to fail early
65
  })
66
 
67
+ const tmpMaskDownloadUrl = await page.$$eval('img[data-testid="detailed-image"]', el => el.map(x => x.getAttribute("src"))[0])
68
 
69
  let segments: ImageSegment[] = []
70
 
 
78
  // const tmpMaskFileName = `${uuidv4()}.png`
79
  // await downloadFileToTmp(maskUrl, tmpMaskFileName)
80
 
81
+ const rawPngInBase64 = await downloadImageAsBase64(tmpMaskDownloadUrl)
82
 
83
+ const maskUrl = await resizeBase64Image(rawPngInBase64, width, height)
84
 
85
  return {
86
+ maskUrl,
87
  segments,
88
  }
89
  } catch (err) {