| --- |
| title: Z-Image + Watermark Remover V5 |
| emoji: 🎨 |
| colorFrom: yellow |
| colorTo: purple |
| sdk: gradio |
| sdk_version: 5.23.1 |
| python_version: "3.10" |
| app_file: app.py |
| startup_duration_timeout: 30m |
| --- |
| |
| # Z-Image + Watermark Remover V5.1 |
|
|
| ZeroGPU Gradio Space combining Z-Image-Turbo, Florence-2 watermark detection and LaMa image/video watermark removal. |
|
|
| ## V5 fixes |
|
|
| - Removes the invalid `@spaces.GPU(duration=300/450)` video request. |
| - Uses a maximum 120-second ZeroGPU request for video, matching the documented custom-duration example/cap used by ZeroGPU tiers. |
| - Adds a preflight video duration check and rejects videos that are too long for a single ZeroGPU request instead of submitting a request that will certainly fail. |
| - Default maximum input video length: 45 seconds. Set `WATERMARK_MAX_VIDEO_SECONDS` in Space Variables if you want a different limit; keep it realistic for the 120-second GPU request. |
| - Optimizes LaMa video processing by inpainting only the watermark bounding regions instead of the entire frame. |
| - Keeps the original audio stream with FFmpeg. |
| - Keeps V3/V4 Florence-2 compatibility patch and writable-cache fallback. |
| - Keeps Gradio API endpoints: `generate_image`, `watermark_preview`, `remove_image`, `remove_video`. |
|
|
| ## Important ZeroGPU behavior |
|
|
| A single `@spaces.GPU` invocation is one GPU reservation. Splitting a video into files inside that same function does **not** release the GPU between chunks. Therefore V5 does not falsely claim to provide multiple independent GPU reservations for one click. Instead it uses a bounded single-request video mode and fails early with a clear message when the input is too long. |
|
|
| For longer videos, use the API/UI to process shorter clips separately and concatenate them locally, or move the workload to a dedicated GPU Space. |
|
|
| ## Deployment |
|
|
| Upload the files to the root of a Gradio ZeroGPU Space. Gradio is managed by the Space `sdk_version`; do not pin Gradio in `requirements.txt`. |
|
|
| Set `HF_TOKEN` as a Space Secret for authenticated Hub downloads if desired. |
|
|
| ## V5.1 dependency fix |
|
|
| Florence-2 dynamically imports `einops` and `timm`. V5.1 adds both packages to `requirements.txt`. |
|
|