SlopStopper is a local, privacy-focused automated system designed to audit a child’s YouTube history. It acts as an intelligent "guardian" that uses LLMs (Google Gemini) to detect "brainrot," radicalization pipelines, dark patterns, and low-quality content ("slop").
Unlike generic brand safety tools, SlopStopper adopts the persona of a cynical, protective parent who analyzes content intent rather than just keywords.
data/slopstopper.db).uv (for dependency management)Clone & Install
git clone <repo>
cd slopstopper
uv sync
Environment Variables
Create a .env file in the root directory:
GEMINI_API_KEY=your_actual_api_key_here
Data
Place your YouTube watch-history.json (from Google Takeout) in the root directory of the project.
Parse your raw watch-history.json into the local database. This step is idempotent and can be run multiple times as you add new history files.
uv run src/ingest.py
Analyze pending videos using the Gemini API.
Analyze specific videos (good for testing):
uv run src/analyze.py --ids VIDEO_ID_1 VIDEO_ID_2
Analyze a batch of videos (e.g., first 50):
uv run src/analyze.py --limit 50
Analyze ALL pending videos:
uv run src/analyze.py --all
Compare Models (A/B Test with Judge):
uv run src/compare_models.py VIDEO_ID
Launch the local web interface to explore the results.
uv run streamlit run src/report.py
Execute the test suite (includes mocked LLM interactions).
uv run pytest
src/ingest.py: Parses JSON to SQLite.src/analyze.py: Main logic for transcript fetching and LLM analysis.src/report.py: Streamlit dashboard.src/schema.py: Pydantic models collecting the analysis schema.src/prompts.py: System prompts defining the "SlopStopper" persona.data/: Stores the SQLite database.SlopStopper is a local, privacy-focused automated system designed to audit a child’s YouTube history. It acts as an intelligent "guardian" that uses LLMs (Google Gemini) to detect "brainrot," radicalization pipelines, dark patterns, and low-quality content ("slop").
Unlike generic brand safety tools, SlopStopper adopts the persona of a cynical, protective parent who analyzes content intent rather than just keywords.
data/slopstopper.db).uv (for dependency management)Clone & Install
git clone <repo>
cd slopstopper
uv sync
Environment Variables
Create a .env file in the root directory:
GEMINI_API_KEY=your_actual_api_key_here
Data
Place your YouTube watch-history.json (from Google Takeout) in the root directory of the project.
Parse your raw watch-history.json into the local database. This step is idempotent and can be run multiple times as you add new history files.
uv run src/ingest.py
Analyze pending videos using the Gemini API.
Analyze specific videos (good for testing):
uv run src/analyze.py --ids VIDEO_ID_1 VIDEO_ID_2
Analyze a batch of videos (e.g., first 50):
uv run src/analyze.py --limit 50
Analyze ALL pending videos:
uv run src/analyze.py --all
Compare Models (A/B Test with Judge):
uv run src/compare_models.py VIDEO_ID
Launch the local web interface to explore the results.
uv run streamlit run src/report.py
Execute the test suite (includes mocked LLM interactions).
uv run pytest
src/ingest.py: Parses JSON to SQLite.src/analyze.py: Main logic for transcript fetching and LLM analysis.src/report.py: Streamlit dashboard.src/schema.py: Pydantic models collecting the analysis schema.src/prompts.py: System prompts defining the "SlopStopper" persona.data/: Stores the SQLite database.