lsmpp commited on
Commit
87ade98
·
verified ·
1 Parent(s): bf8f4a1

Serve lightweight previews and use the Python server directly

Browse files
Files changed (2) hide show
  1. app.py +7 -5
  2. space.py +1 -1
app.py CHANGED
@@ -105,12 +105,13 @@ def make_session(image: Image.Image, example: str | None = None):
105
  directory = RUNTIME / sid
106
  directory.mkdir()
107
  image.save(directory / "source.png")
 
108
  SESSIONS[sid] = {
109
  "directory": directory, "size": image.size, "example": example,
110
  "touched": time.monotonic(), "job": None,
111
  }
112
  return {"id": sid, "width": image.width, "height": image.height,
113
- "image": f"/api/sessions/{sid}/source.png", "example": example}
114
 
115
 
116
  def update_job(jid: str, **values):
@@ -258,6 +259,7 @@ def refine(session, jid, request: RefineRequest, progress_report=None):
258
  sample_id="studio", progress_callback=progress)
259
  report(message="Preparing region comparisons", progress=0.97)
260
  result.image.save(directory / f"{jid}.png")
 
261
  crops = []
262
  with Image.open(directory / "source.png") as before:
263
  for i, row in enumerate(rows):
@@ -266,13 +268,13 @@ def refine(session, jid, request: RefineRequest, progress_report=None):
266
  box = (max(0, math.floor(x0 - padding)), max(0, math.floor(y0 - padding)),
267
  min(before.width, math.ceil(x1 + padding)), min(before.height, math.ceil(y1 + padding)))
268
  for label, image in (("before", before), ("after", result.image)):
269
- image.crop(box).save(directory / f"{jid}-{i}-{label}.png")
270
  crops.append({"id": row.id, "text": row.text, "bbox": row.bbox,
271
- "before": f"{jid}-{i}-before.png", "after": f"{jid}-{i}-after.png"})
272
  metadata = {"regions": [row.model_dump() for row in rows], "model": request.variant,
273
  "steps": request.steps, "seed": request.seed, "guidance": request.guidance}
274
  (directory / f"{jid}.json").write_text(json.dumps(metadata, ensure_ascii=False, indent=2))
275
- return {**metadata, "image": f"{jid}.png", "regions": crops, "metadata": f"{jid}.json"}
276
 
277
 
278
  @app.get("/")
@@ -367,7 +369,7 @@ def job(sid: str, jid: str):
367
  def session_file(sid: str, filename: str):
368
  session = session_for(sid)
369
  # File names are server-generated. A session cannot address another session's data.
370
- if Path(filename).name != filename or not filename.endswith((".png", ".json")):
371
  raise HTTPException(404, "File not found")
372
  path = session["directory"] / filename
373
  if not path.is_file():
 
105
  directory = RUNTIME / sid
106
  directory.mkdir()
107
  image.save(directory / "source.png")
108
+ image.save(directory / "preview.webp", quality=94, method=4)
109
  SESSIONS[sid] = {
110
  "directory": directory, "size": image.size, "example": example,
111
  "touched": time.monotonic(), "job": None,
112
  }
113
  return {"id": sid, "width": image.width, "height": image.height,
114
+ "image": f"/api/sessions/{sid}/preview.webp", "example": example}
115
 
116
 
117
  def update_job(jid: str, **values):
 
259
  sample_id="studio", progress_callback=progress)
260
  report(message="Preparing region comparisons", progress=0.97)
261
  result.image.save(directory / f"{jid}.png")
262
+ result.image.save(directory / f"{jid}.webp", quality=94, method=4)
263
  crops = []
264
  with Image.open(directory / "source.png") as before:
265
  for i, row in enumerate(rows):
 
268
  box = (max(0, math.floor(x0 - padding)), max(0, math.floor(y0 - padding)),
269
  min(before.width, math.ceil(x1 + padding)), min(before.height, math.ceil(y1 + padding)))
270
  for label, image in (("before", before), ("after", result.image)):
271
+ image.crop(box).save(directory / f"{jid}-{i}-{label}.webp", quality=96, method=4)
272
  crops.append({"id": row.id, "text": row.text, "bbox": row.bbox,
273
+ "before": f"{jid}-{i}-before.webp", "after": f"{jid}-{i}-after.webp"})
274
  metadata = {"regions": [row.model_dump() for row in rows], "model": request.variant,
275
  "steps": request.steps, "seed": request.seed, "guidance": request.guidance}
276
  (directory / f"{jid}.json").write_text(json.dumps(metadata, ensure_ascii=False, indent=2))
277
+ return {**metadata, "image": f"{jid}.png", "preview": f"{jid}.webp", "regions": crops, "metadata": f"{jid}.json"}
278
 
279
 
280
  @app.get("/")
 
369
  def session_file(sid: str, filename: str):
370
  session = session_for(sid)
371
  # File names are server-generated. A session cannot address another session's data.
372
+ if Path(filename).name != filename or not filename.endswith((".png", ".webp", ".json")):
373
  raise HTTPException(404, "File not found")
374
  path = session["directory"] / filename
375
  if not path.is_file():
space.py CHANGED
@@ -91,4 +91,4 @@ def refine_image(sid: str, payload: str) -> dict:
91
 
92
  if __name__ == "__main__":
93
  studio.app.launch(server_name=os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0"),
94
- server_port=int(os.environ.get("PIXTEXT_PORT", "7860")), show_error=False)
 
91
 
92
  if __name__ == "__main__":
93
  studio.app.launch(server_name=os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0"),
94
+ server_port=int(os.environ.get("PIXTEXT_PORT", "7860")), show_error=False, ssr_mode=False)