What happens to a job between pressing Separate and getting a result, and what decides how long it takes.
Your file is uploaded, a job is created, and it waits for a free GPU worker. Workers poll continuously and each asks for one job at a time. Nothing is reserved ahead of time: a job is claimed the moment a worker is free and your job is the best candidate for it.
Every waiting job carries a tier. A worker always takes the highest tier available, and within a tier the oldest job goes first.
| Tier | Who | Position in the queue |
|---|---|---|
| Premium | Accounts with credits | Served first, always |
| Registered | Signed in, free allowance | After premium |
| Not signed in | No account | Last — but nothing waits indefinitely; see below |
There is no fixed per-account allowance. Each free worker goes to whichever premium account currently has the fewest jobs running, oldest job first when that ties. Fairness comes out of that ordering rather than a cap, which means capacity is never held back in case somebody else might want it.
While any premium job is waiting, every other account is held to one job in flight. This is the rule that keeps paid separations quick, and it is why the figures below differ so sharply between tiers.
A job submitted without an account moves up into the registered tier once it has waited 10 minutes. Without that, a steady stream of signed-in work could keep anonymous jobs waiting indefinitely at busy times. It does not overtake premium work.
Measured over the last 24 hours across all regions. These are queue waits — time from submission to a worker picking the job up — and do not include processing itself.
| Tier | Jobs | Started within 10s | Started within 60s | Waiting right now |
|---|---|---|---|---|
| Premium | 7,583 | 79% | 89% | 0 |
| Registered | 16,923 | 59% | 84% | 10 |
| Not signed in | 7,048 | 31% | 46% | 5 |
Updated every couple of minutes.
If you are integrating, do not guess at a wait. GET /api/app/queue/summary returns the state of your own queue so you can show a real progress indicator instead of a spinner.
estimated_wait_seconds is null when it cannot be measured — no queued job, or too little recent activity to derive a rate. Treat null as “unknown”, never as “now”.
It is cheap enough to poll at the same interval as the separation status endpoint.
Scheduling behaviour described on this page is current. If you had built expectations around how the queue used to behave, these are the changes worth knowing about.
| Date | Change |
|---|---|
| 19 September 2026 | Premium accounts now share capacity by round-robin. Previously each premium account was limited to one job at a time whenever another premium account was also waiting, which left much of the fleet to lower tiers while paid batches ran one job at a time. Batch submissions are substantially faster as a result; single submissions are unaffected or slightly quicker. |
| 18 September 2026 | Jobs submitted without an account are promoted into the registered tier after 10 minutes of waiting. Previously they could remain behind signed-in work indefinitely during busy periods. |