Pabloler21 Claude Opus 5.5 commited on
Commit
124eb9e
·
1 Parent(s): 18f2413

Centrar la imagen del editor de zona con zoom del navegador distinto de 100%

Browse files

Con zoom 90% el lienzo del editor de Gradio 6.30 quedaba más ancho que su
recuadro (1853 px en uno de 916): la imagen aparecía corrida a la derecha,
cortada, y no se podía pintar encima. Al cargar la página, al subir un video,
al borrar la zona y al cambiar el zoom, se ajusta el lienzo al recuadro y se
vuelve a encuadrar la imagen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Files changed (1) hide show
  1. camguard/ui.py +24 -2
camguard/ui.py CHANGED
@@ -22,6 +22,27 @@ BRUSH_SIZE = 60
22
  # Gradio borra sus copias de videos subidos y resultados: cada media hora, las de más de 1 hora.
23
  CACHE_CLEANUP = (1800, 3600)
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  # Hugging Face define SPACE_ID en todo Space; en la PC no existe.
26
  WHERE = (
27
  "> 🔒 **El video se procesa en servidores de Hugging Face.** No subas grabaciones reales o "
@@ -157,8 +178,9 @@ def build_demo() -> gr.Blocks:
157
  )
158
  gallery = gr.Gallery(label="Momento de entrada de cada intruso", columns=4)
159
 
160
- video.upload(blank_zone, video, editor)
161
- clear.click(blank_zone, video, editor)
 
162
  run.click(on_analyze, [video, editor], [result, table, gallery])
163
  return demo
164
 
 
22
  # Gradio borra sus copias de videos subidos y resultados: cada media hora, las de más de 1 hora.
23
  CACHE_CLEANUP = (1800, 3600)
24
 
25
+ # Arregla el editor de Gradio (6.30) cuando el zoom del navegador no es 100%: su lienzo queda
26
+ # más ancho que el recuadro (1853 px en uno de 916 con zoom 90%), centra la imagen sobre ese
27
+ # ancho y se ve corrida a la derecha, cortada, sin poder pintar encima. Ajusta el lienzo al
28
+ # recuadro y vuelve a encuadrar la imagen; se repite unos segundos para cubrir la carga lenta de
29
+ # la imagen, y al cambiar el zoom o el tamaño de la ventana. window.editor es interno de Gradio:
30
+ # si deja de existir, no hace nada.
31
+ REFIT_EDITOR_JS = """() => {
32
+ if (!window.camguardRefit) {
33
+ window.camguardRefit = () => {
34
+ try {
35
+ const editor = window.editor;
36
+ const box = editor.target_element.getBoundingClientRect();
37
+ editor.resize_canvas(box.width, box.height);
38
+ editor.tools.get("zoom").set_zoom("fit");
39
+ } catch {}
40
+ };
41
+ window.addEventListener("resize", () => setTimeout(window.camguardRefit, 100));
42
+ }
43
+ for (const ms of [300, 1000, 2500, 5000]) setTimeout(window.camguardRefit, ms);
44
+ }"""
45
+
46
  # Hugging Face define SPACE_ID en todo Space; en la PC no existe.
47
  WHERE = (
48
  "> 🔒 **El video se procesa en servidores de Hugging Face.** No subas grabaciones reales o "
 
178
  )
179
  gallery = gr.Gallery(label="Momento de entrada de cada intruso", columns=4)
180
 
181
+ demo.load(None, js=REFIT_EDITOR_JS)
182
+ video.upload(blank_zone, video, editor).then(None, js=REFIT_EDITOR_JS)
183
+ clear.click(blank_zone, video, editor).then(None, js=REFIT_EDITOR_JS)
184
  run.click(on_analyze, [video, editor], [result, table, gallery])
185
  return demo
186