Skip to content

Repository files navigation

QC Buddy Reddit Footage Watcher

Watches chosen subreddits for newly posted video footage, downloads it, runs it through QC Buddy's detection engine, and — if issues are found — adds an entry to a local review queue with a drafted comment. Nothing is ever posted to Reddit automatically. A human always reviews and posts the comment manually.

There are three ways to use this: a double-clickable desktop app, a manual one-shot terminal command, and a fully automated background watcher. The app and manual command need no Reddit API access at all. Reddit's self-serve API app creation is currently locked down and access requires an approval ticket that can take a long time or go unanswered, so the app is the practical way to use this today.

Setup (both modes need this)

  1. Build the QC Buddy sidecar (one-time, from the main repo root):

    npm run build-sidecar

    This produces swift-sidecar/.build/release/QCBuddySidecar, which this tool spawns directly — no GUI or Electron runtime involved.

  2. Create a virtualenv and install dependencies (from this folder):

    python3 -m venv .venv
    .venv/bin/pip install -r requirements.txt
  3. Configure config.yaml:

    • output_dir — where downloaded videos land. Any plain filesystem path works, including a mounted/mapped NAS path.
    • subreddits — only used by automated mode (below); harmless to leave as-is.
    • keep_clean_downloads — set true to keep every download, or leave false to delete files that scan clean (flagged files are always kept).

The app (no Reddit API access needed, no terminal)

Double-click QC Buddy Reddit Checker.app in this folder. It's a small window with:

  1. A "Subreddit or Reddit URL" field and an "Open JSON in Browser" button — type a subreddit name (e.g. filmmakers) and click it. That opens reddit.com/r/filmmakers/new.json in your default browser. Because it's your own logged-in browser doing the fetch (not a script), this always works — it's the same trick as manual mode below, just automated.
  2. Select all the text on that page (Cmd+A), copy it (Cmd+C), come back to the app, and paste it (Cmd+V) into the big box.
  3. Click "Check for Issues". It downloads every video post in that listing, scans each one, and lists any that got flagged below — with the post link and a drafted comment, each with its own Copy Link / Copy Comment button.

Posts it's already checked before are skipped automatically on future runs (shared dedup with the other two modes), and everything flagged also lands in data/review_queue.md for a running log.

If double-clicking does nothing or complains setup isn't finished, do the Setup steps above first (the app needs .venv and the sidecar binary built), then try again.

Manual mode (terminal, no Reddit API access needed)

Same idea as the app, but for a single post from the terminal. For when you spot an interesting video post yourself while browsing Reddit normally. Paste the post's link (and, if it's an external link post, the actual video URL) and it downloads, scans, and prints a drafted comment for you to copy and post yourself. This never logs into Reddit, never calls Reddit's API, and never needs .env filled in — it only ever talks to yt-dlp and the local sidecar binary.

.venv/bin/python -m reddit_watcher.manual \
  "https://www.reddit.com/r/VideoEditing/comments/abc123/my_short_film/" \
  --author theirusername

If the post links to an external video (YouTube, Vimeo, Dropbox) rather than being a native v.redd.it post, pass that video URL as a second argument:

.venv/bin/python -m reddit_watcher.manual \
  "https://www.reddit.com/r/VideoEditing/comments/abc123/my_short_film/" \
  "https://www.youtube.com/watch?v=..." \
  --author theirusername

Flagged results get appended to data/review_queue.md same as automated mode, so you keep one running log either way.

Automated mode (needs approved Reddit API access)

  1. Register a Reddit app. Go to https://www.reddit.com/prefs/apps, click "create app", choose type script, and set any redirect URI (e.g. http://localhost:8080, unused for read-only access). Note the client ID (under the app name) and client secret. As of mid-2026 this self-serve flow is largely non-functional; the fallback is a Data Access Request ticket at support.reddithelp.com/hc/en-us/requests/new?ticket_form_id=14868593862164 (inquiry type: "I'm a developer and want to build a Reddit App that does not work in the Devvit ecosystem").

  2. Configure credentials. Copy .env.example to .env and fill in REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET / REDDIT_USER_AGENT from step 1. Only read-only access is used — this tool never logs in as a Reddit user, posts, or votes.

  3. Finish config.yaml: fill in the real subreddits list.

  4. Run it manually first to confirm everything works:

    .venv/bin/python -m reddit_watcher.main

    Leave it running for a bit, then check data/review_queue.md and data/watcher.db once a flagged post comes through. Stop with Ctrl-C.

  5. Install as a background job (macOS launchd), so it runs continuously:

    cp com.qcbuddy.redditwatcher.plist ~/Library/LaunchAgents/
    launchctl load ~/Library/LaunchAgents/com.qcbuddy.redditwatcher.plist

    Logs go to data/watcher.log / data/watcher.err.log. To stop it:

    launchctl unload ~/Library/LaunchAgents/com.qcbuddy.redditwatcher.plist

Reviewing flagged posts

Open data/review_queue.md periodically. Each entry has the post link, author, subreddit, the issues QC Buddy found, and a drafted comment you can copy, edit, and post yourself. Nothing here posts on your behalf.

How it works

  • reddit_watcher/gui.py — the Tkinter desktop app (QC Buddy Reddit Checker.app is a thin double-clickable wrapper around this). Runs downloads/scans on a background thread so the window stays responsive.
  • reddit_watcher/batch.py — parses pasted Reddit JSON (any shape: a listing, a single post's [post, comments] response, or a bare post dict) and runs the download-scan-draft pipeline over every video post in it. Shared by the app; not restricted to config.yaml's subreddit list.
  • reddit_watcher/manual.py — the single-post terminal equivalent of batch.py, for one pasted post link instead of a whole listing.
  • reddit_watcher/watcher.py — one read-only PRAW stream across all configured subreddits, filtered down to video posts (native v.redd.it or a configured domain allowlist) and per-subreddit flair rules. Automated mode only; needs approved API access.
  • reddit_watcher/post_filters.py — the video/flair filtering rules, shared by both watcher.py (PRAW) and batch.py (pasted JSON) so the two modes agree on what counts as "a video post worth checking."
  • reddit_watcher/downloader.py — shells out to yt-dlp, saving into output_dir with the Reddit post ID in the filename, remuxed to .mp4.
  • reddit_watcher/scan_bridge.py — spawns the compiled Swift sidecar binary and speaks its existing newline-delimited JSON protocol (the same one Electron uses) to run one analyze job per file.
  • reddit_watcher/review_queue.py — SQLite dedup (processed_posts, shared across all three modes) and flagged-post storage (review_queue), with data/review_queue.md regenerated from the database each run.
  • reddit_watcher/comment_templates.py — drafts the comment text from the issues the scan returned.
  • reddit_watcher/main.py — automated-mode orchestrator; auto-restarts the stream with backoff if it crashes.

About

Reddit footage watcher for QC Buddy: monitors subreddits for posted video, downloads and scans it, queues flagged issues for manual review.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages