Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
·
92ae21d
1
Parent(s):
9002fdc
fixed upscaling
Browse files- src/config.mts +1 -1
- src/index.mts +124 -0
src/config.mts
CHANGED
@@ -11,7 +11,7 @@ export const filesDirPath = path.join(storagePath, "files")
|
|
11 |
export const pendingFilesDirFilePath = path.join(filesDirPath, "pending")
|
12 |
export const completedFilesDirFilePath = path.join(filesDirPath, "completed")
|
13 |
|
14 |
-
// this is a semi-persistent storage (we want to renew it from time to time)
|
15 |
export const cacheDirPath = path.join(storagePath, "cache")
|
16 |
export const renderedDirFilePath = path.join(cacheDirPath, "rendered")
|
17 |
|
|
|
11 |
export const pendingFilesDirFilePath = path.join(filesDirPath, "pending")
|
12 |
export const completedFilesDirFilePath = path.join(filesDirPath, "completed")
|
13 |
|
14 |
+
// this is a semi-persistent storage (we will want to renew it from time to time)
|
15 |
export const cacheDirPath = path.join(storagePath, "cache")
|
16 |
export const renderedDirFilePath = path.join(cacheDirPath, "rendered")
|
17 |
|
src/index.mts
CHANGED
@@ -23,6 +23,7 @@ import { getRenderedScene, renderScene } from "./production/renderScene.mts"
|
|
23 |
import { parseRenderRequest } from "./utils/parseRenderRequest.mts"
|
24 |
import { loadRenderedSceneFromCache } from "./utils/loadRenderedSceneFromCache.mts"
|
25 |
import { analyzeImage } from "./analysis/analyzeImageWithIDEFICSAndNastyHack.mts"
|
|
|
26 |
// import { speechToText } from "./speechToText/speechToTextWithWhisperLib.mts"
|
27 |
|
28 |
initFolders()
|
@@ -150,6 +151,14 @@ app.post("/listen", async (req, res) => {
|
|
150 |
// a "fast track" pipeline
|
151 |
app.post("/render", async (req, res) => {
|
152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
console.log(req.body)
|
154 |
|
155 |
const request = parseRenderRequest(req.body as RenderRequest)
|
@@ -218,6 +227,121 @@ app.post("/render", async (req, res) => {
|
|
218 |
}
|
219 |
})
|
220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
// a "fast track" pipeline
|
222 |
app.get("/render/:renderId", async (req, res) => {
|
223 |
|
|
|
23 |
import { parseRenderRequest } from "./utils/parseRenderRequest.mts"
|
24 |
import { loadRenderedSceneFromCache } from "./utils/loadRenderedSceneFromCache.mts"
|
25 |
import { analyzeImage } from "./analysis/analyzeImageWithIDEFICSAndNastyHack.mts"
|
26 |
+
import { upscaleImage } from "./utils/upscaleImage.mts"
|
27 |
// import { speechToText } from "./speechToText/speechToTextWithWhisperLib.mts"
|
28 |
|
29 |
initFolders()
|
|
|
151 |
// a "fast track" pipeline
|
152 |
app.post("/render", async (req, res) => {
|
153 |
|
154 |
+
if (!hasValidAuthorization(req.headers)) {
|
155 |
+
console.log("Invalid authorization")
|
156 |
+
res.status(401)
|
157 |
+
res.write(JSON.stringify({ error: "invalid token" }))
|
158 |
+
res.end()
|
159 |
+
return
|
160 |
+
}
|
161 |
+
|
162 |
console.log(req.body)
|
163 |
|
164 |
const request = parseRenderRequest(req.body as RenderRequest)
|
|
|
227 |
}
|
228 |
})
|
229 |
|
230 |
+
// upscale an arbitrary image
|
231 |
+
app.post("/upscale", async (req, res) => {
|
232 |
+
|
233 |
+
if (!hasValidAuthorization(req.headers)) {
|
234 |
+
console.log("Invalid authorization")
|
235 |
+
res.status(401)
|
236 |
+
res.write(JSON.stringify({ error: "invalid token" }))
|
237 |
+
res.end()
|
238 |
+
return
|
239 |
+
}
|
240 |
+
|
241 |
+
const image = `${req.body.image}`
|
242 |
+
|
243 |
+
if (!image) {
|
244 |
+
console.error("invalid input image")
|
245 |
+
res.status(400)
|
246 |
+
res.write(JSON.stringify({ error: `invalid input image` }))
|
247 |
+
res.end()
|
248 |
+
return
|
249 |
+
}
|
250 |
+
|
251 |
+
let response = {
|
252 |
+
assetUrl: "",
|
253 |
+
error: "",
|
254 |
+
}
|
255 |
+
|
256 |
+
let assetUrl = ""
|
257 |
+
try {
|
258 |
+
try {
|
259 |
+
assetUrl = await upscaleImage(image, 2)
|
260 |
+
} catch (err) {
|
261 |
+
// hmm.. let's try again?
|
262 |
+
try {
|
263 |
+
assetUrl = await upscaleImage(image, 2)
|
264 |
+
} catch (err) {
|
265 |
+
throw new Error(`second attempt to upscale the image failed (${err})`)
|
266 |
+
}
|
267 |
+
}
|
268 |
+
if (!assetUrl) {
|
269 |
+
throw new Error(`no image to return`)
|
270 |
+
}
|
271 |
+
|
272 |
+
response.assetUrl = assetUrl
|
273 |
+
// console.log(`request ${renderId} is already in cache, so we return that`)
|
274 |
+
res.status(200)
|
275 |
+
res.write(JSON.stringify(response))
|
276 |
+
res.end()
|
277 |
+
return
|
278 |
+
} catch (err) {
|
279 |
+
response.error = `${err}`
|
280 |
+
console.error(`${err}`)
|
281 |
+
res.status(500)
|
282 |
+
res.write(JSON.stringify(response))
|
283 |
+
res.end()
|
284 |
+
}
|
285 |
+
})
|
286 |
+
|
287 |
+
|
288 |
+
// used to upscale an existing image
|
289 |
+
// the image has to be completed for this to work
|
290 |
+
// ie it has to be in cache
|
291 |
+
// it's a bit of a hack endpoint I've added to reduce the laod
|
292 |
+
// on the AI Comic Factory, but we don't really need it for other applications
|
293 |
+
app.post("/upscale/:renderId", async (req, res) => {
|
294 |
+
|
295 |
+
const renderId = `${req.params.renderId}`
|
296 |
+
|
297 |
+
if (!uuidValidate(renderId)) {
|
298 |
+
console.error("invalid render id")
|
299 |
+
res.status(400)
|
300 |
+
res.write(JSON.stringify({ error: `invalid render id` }))
|
301 |
+
res.end()
|
302 |
+
return
|
303 |
+
}
|
304 |
+
|
305 |
+
let response = {
|
306 |
+
assetUrl: "",
|
307 |
+
error: "",
|
308 |
+
}
|
309 |
+
|
310 |
+
let assetUrl = ""
|
311 |
+
try {
|
312 |
+
// we still try to search for it in the cache
|
313 |
+
const cached = await loadRenderedSceneFromCache(undefined, renderId)
|
314 |
+
try {
|
315 |
+
assetUrl = await upscaleImage(cached.assetUrl, 2)
|
316 |
+
} catch (err) {
|
317 |
+
// hmm.. let's try again?
|
318 |
+
try {
|
319 |
+
assetUrl = await upscaleImage(cached.assetUrl, 2)
|
320 |
+
} catch (err) {
|
321 |
+
throw new Error(`second attempt to upscale the image failed (${err})`)
|
322 |
+
}
|
323 |
+
}
|
324 |
+
if (!assetUrl) {
|
325 |
+
throw new Error(`no image to return`)
|
326 |
+
}
|
327 |
+
|
328 |
+
response.assetUrl = assetUrl
|
329 |
+
// console.log(`request ${renderId} is already in cache, so we return that`)
|
330 |
+
res.status(200)
|
331 |
+
res.write(response)
|
332 |
+
res.end()
|
333 |
+
return
|
334 |
+
} catch (err) {
|
335 |
+
// console.log("renderId not found in cache: "+ err)
|
336 |
+
// move along
|
337 |
+
response.error = `${err}`
|
338 |
+
console.error(`${err}`)
|
339 |
+
res.status(500)
|
340 |
+
res.write(JSON.stringify(response))
|
341 |
+
res.end()
|
342 |
+
}
|
343 |
+
})
|
344 |
+
|
345 |
// a "fast track" pipeline
|
346 |
app.get("/render/:renderId", async (req, res) => {
|
347 |
|