← EXTRACT

Extract stuck at 100%

100% does not mean done. Frame extract sets percent: 100 when the last frame finishes, but the job stays status: "running" through viewerlinkdata_tablefinalize. Only then does the server set status: "done".

Job JSON from the API is the source of truth — not the tab label alone.

1. Read the live job

Best first step on the host or from any machine that can reach CREWS:

curl -sS "https://crews.championship.technology/api/extract/active" | python3 -m json.tool

# or a known job id:
curl -sS "https://crews.championship.technology/api/extract/<JOB_ID>" | python3 -m json.tool
Field Meaning if stuck at 100%
status Still running = worker alive but not terminal; done / error / cancelled = UI lag
phase Where it’s blocked: extract / viewer / link / data_table / finalize
message Last progress line
done / total Frames finished vs expected
detail Present on unexpected exceptions

2. Tail server-side logs

On the host (CREWS app root):

# Live extract trail (phase + %)
tail -n 80 logs/ui.log
# or follow:
tail -f logs/ui.log | grep extract

# History (only written on terminal outcome)
python3 -c "import json; d=json.load(open('logs/extract_history.json')); print(json.dumps(d.get('entries',[])[:3], indent=2))"

If ui.log stops after something like extract 100% / phase extract and never shows viewer, data_table, or done, the worker is hung in post-frame work (or dead without a terminal status).

3. Check OS processes

# CREWS Python still up?
ps aux | grep -E '[p]ython.*server|[p]ython.*crews'

# ffmpeg still chewing frames? (should be gone after 100% frames)
ps aux | grep '[f]fmpeg'

# ffprobe during data_table (can take up to 60s per video)
ps aux | grep '[f]fprobe'

4. Disk / project output

# Project folder growing?
ls -lah projects/<slug>/
ls projects/<slug>/ | wc -l

# viewer written?
ls -lah projects/<slug>/viewer.html

# data table?
ls -lah data_tables/ | tail

If frames and viewer.html exist but the job never goes done, post-return work in _run_extract_job (link/sync) or the UI poll is the issue.

5. Interpret phase → action

phase at 100% Likely cause What to do
extract Last ffmpeg worker stuck Kill orphan ffmpeg; check disk space; cancel job
viewer / link Writing/registering project Check perms on projects/ + projects.json
data_table ffprobe × N videos Wait, or check stuck ffprobe; large RAR member listing
finalize Server finishing registry before done Should be brief; if long, check disk + thread health
missing / frozen log Worker thread died hard Restart CREWS; check systemd/journal or console traceback

6. Unstick safely

# Prefer cancel API if job_id known
curl -sS -X POST "https://crews.championship.technology/api/extract/<JOB_ID>/cancel"

# Then restart CREWS process (jobs are in-memory only)
# systemd example:
sudo systemctl restart crews   # use your real unit name

After restart, in-memory jobs vanish. Check whether projects/<slug>/ and history already look complete; you may only need a browser refresh / relink, not a full re-extract.

Quick triage order

  1. GET /api/extract/active → note phase + message
  2. tail logs/ui.log → last extract line
  3. ps for ffmpeg / ffprobe
  4. Inspect projects/<slug>/viewer.html
  5. Cancel + restart only if the worker is clearly dead/hung

crw >x< crush · extract docs · server-side troubleshooting