📝 MediaTranscriber_manual.mdv4.6.3 · 2026-11-01

MediaTranscriber.py + chktranscribe -- manual entry, x into ISE_Python_Scripts_Manual (next Master version): add the history lines, add the MediaTranscriber and chktranscribe sections, and update the quoted MediaSearch version (v1.10.4) to v1.11.0. (Second pass, 2026-10-29: MediaTranscriber and chktranscribe are now v1.1.0 -- put the v1.1.0 lines first.)

Version history lines

ISE MediaTranscriber.py v1.1.0 (2026-10-29) -- Music / no-speech videos can be flagged so no run ever processes them: --skip ID [ID ...] [--reason "text"] records a finished empty entry with skipped: true and the reason; --unskip ID [ID ...] deletes it so the next run takes the video again. Both refuse while a run is active (exit 3) and --skip will not overwrite a done transcript without --force. New -n cap on every llama-mtmd-cli call (--max-tokens, default 1024), and a repetition guard that drops a piece whose text is one phrase repeated (compresses to under 12% of its size, 200+ characters), keeping a dropped_pieces count. The guard threshold is untested against the real model.

ISE chktranscribe v1.1.0 (2026-10-29) -- Videos flagged skip are counted and listed on their own, with the reason, and are no longer counted under "no speech".

ISE MediaTranscriber.py v1.0.0 (2026-10-29) -- New job. Transcribes the speech of every .mp4 in media_store.json into ISE_Data/transcripts_store.json with the same engine as the ts script (ffmpeg to 16 kHz mono wav, then llama-mtmd-cli with Qwen3-ASR-0.6B Q8_0). Runs on Live, any time, one run at a time. Restartable, with a controlled stop (--stop).

ISE chktranscribe v1.0.0 (2026-10-29) -- New read-only monitor for the job: running / idle / died, what it is on now, progress, speed and ETA, failures, cross-checks. Changes nothing, takes no lock.

ISE MediaSearch.py v1.11.0 (2026-10-29) -- Video speech is searchable. A new optional store, transcripts_store.json, gives an attachment a transcript, matched like a caption (new field "transcript", 30 points per distinct term; a name hit still outranks it). The evidence line and the result card/CLI show a short snippet around the first hit. A transcript is only attached to an attachment already in the catalogue, so one for a video that has left media_store.json (for example its post is now marked #do-not-index) never surfaces. A missing store is fine; an unreadable one is reported like the other optional stores. Nothing else changed.

Usage

python3.8 MediaTranscriber.py                  all pending videos
python3.8 MediaTranscriber.py --dry-run what it WOULD do; changes nothing
python3.8 MediaTranscriber.py --chunk-size 20 at most 20 videos, then stop
python3.8 MediaTranscriber.py --attachid 4683 one video (add --force to redo it)
python3.8 MediaTranscriber.py --stop controlled stop of the running job
python3.8 MediaTranscriber.py --skip 2321 2647 --reason "music, no speech" flag videos; needs no run active
python3.8 MediaTranscriber.py --unskip 2321 clear the flag; the next run takes the video again
nohup python3.8 MediaTranscriber.py > /root/MediaTranscriber.out 2>&1 &

chktranscribe one report
chktranscribe --watch 30 repeat every 30 s (Ctrl-C leaves it; the job is not affected)