Add image_url input mode (service fetches the image)
/remove-background now accepts either an uploaded `file` or an `image_url` the service fetches itself (exactly one required). The fetch runs BEFORE the compute gate so a slow download never holds a pool slot, and is bounded by its own semaphore (2 x cpu_workers, hard cap 64) plus a shared httpx client (connection reuse, matching max_connections) -- this restores the throttling a direct upload has implicitly, so a burst of tiny URL requests can't exhaust FDs/ephemeral ports or hammer the upstream. Bounds: 25 MB body cap (413), 5 s connect / 15 s read timeout, <=3 redirects; MAX_IMAGE_PIXELS still applies post-decode. Deliberately NO SSRF filtering (no private-IP/host allowlist) -- the endpoint trusts authenticated callers; auth runs before any fetch. Do not expose to untrusted clients without adding private-address/redirect filtering to _fetch_image. Adds httpx. New env knobs BGFILTER_FETCH_MAX_BYTES / BGFILTER_FETCH_TIMEOUT. Docs (README/README_ZH/DEPLOY/DEPLOY_ZH) updated. _fetch_image unit-tested locally (happy path, size cap ->413, bad scheme ->400, 404 ->400); on-box end-to-end still pending (test box went offline). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -217,6 +217,8 @@ redirect back to `huggingface.co`, which recent `huggingface_hub` rejects with
|
||||
| `BGFILTER_CONFIG` | `configs/default.yaml` | Pipeline config file |
|
||||
| `BGFILTER_DEVICE` | `cpu` | Overrides **both** model and segmentation device (`cuda` for GPU) |
|
||||
| `BGFILTER_MAX_IMAGE_PIXELS` | `4194304` | Reject larger inputs with `413` (~4 MP) |
|
||||
| `BGFILTER_FETCH_MAX_BYTES` | `26214400` | `image_url` mode: cap the downloaded body (~25 MB) → `413`. No SSRF filtering — keep auth on / callers trusted. |
|
||||
| `BGFILTER_FETCH_TIMEOUT` | `15` | `image_url` mode: read timeout (s) for the fetch (connect fixed at 5 s). Outbound fetch concurrency is fixed at `2 × cpu_workers` (hard cap 64). |
|
||||
| `BGFILTER_PRELOAD` | `1` | Load default models at startup (first request isn't cold) |
|
||||
| `BGFILTER_CROSS_CHECK` | config (`on`) | Force the cross-check veto on/off (`0` disables; needs `BiRefNet_HR-matting`) |
|
||||
| `BGFILTER_CPU_WORKERS` | config `server.cpu_workers` (`1`) | Thread-pool size for request pipelining. `1` = strictly serial (one request at a time). `>1` lets that many requests run concurrently, overlapping their CPU stages while a GPU mutex serializes the model forwards — keeps the GPU fed instead of idle. Biggest win when the pipeline is CPU-bound (e.g. cross-check off). Set it in the config (`server:` section) or override per box with this env var. |
|
||||
|
||||
Reference in New Issue
Block a user