A complete local-first news aggregation, analysis, and reporting pipeline.
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β RSS Feeds βββββΆβ MongoDB βββββΆβ NER β
β (main.go) β β (Articles) β β (Flair) β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
ββββββββββββββββββββββββββββ
βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β ChromaDB βββββΆβ Hybrid βββββΆβ Report β
β (Vectors) β β Search β β Generation β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
ββββββββββββββββββββββββββββ
βΌ
βββββββββββββββ βββββββββββββββ
β T5 Bias β β Video Gen β
β Detection β β (MGM) β
βββββββββββββββ βββββββββββββββ
# 1. Load RSS feeds
cd rss && go run . ../config/big.tsv ../config/kill.tsv
# 2. Run NER
cd ner-hub && go run . --start-date -7 endpoints.tsv
# 3. Generate vectors
python db/mongo2chroma.py load --limit 100
# 4. Search articles
python db/hybrid.py "climate change" -n 10
# 5. Generate report
python db/report.py -7 climate_news "Climate developments" Climate
# 6. Generate video
python mgm/mgm.py article.txt output.mp4Or use the Makefile:
make testrun # Full pipeline
make smallthingsthatgo # Quick testLoad up to 3333 articles per run, backfilling with older articles if date range has fewer:
# Via Makefile (default: 3333)
make vector
# Via Python directly
python db/mongo2chroma.py load --start-date -2 --slack 3333See docs/slack_backfill.md for details.
Analyze bias data to find subjects with extreme coverage bias:
# Interactive CLI with Rich
python scripts/find_media_coverups.py --output interactive
# Output to CSV/JSON
python scripts/find_media_coverups.py --output csv,json
# Via Makefile
make analyze-bias-coverageSee docs/media_coverups.md for details.
Count tokens in text files:
# Fast estimation (chars/4)
python llm/tools/count_tokens.py input.txt
# Accurate count with tiktoken
python llm/tools/count_tokens.py input.txt --accurateReport generation now prints all article titles for transparency:
=== [israel] Processing 40 articles (before cypher) ===
"Israel announces new military operation in Gaza"
"Netanyahug meets with Biden at White House"
"Israeli forces raid West Bank refugee camp"
...
| File | Description |
|---|---|
| Makefile | Pipeline orchestration (full reference) |
| File | Description |
|---|---|
| mongo2chroma.py | MongoDB β ChromaDB vector loader |
| hybrid.py | Hybrid vector + BM25 search |
| geminize.py | LLM processing pipeline |
| report.py | News report generation |
| File | Description |
|---|---|
| ner/main.py | Named Entity Recognition (Flair) |
| ollamaai.py | Ollama LLM client |
| mgm/mgm.py | Video generation (SD Turbo + Kokoro) |
| File | Description |
|---|---|
| t5/bias_detector/ | T5+LoRA bias detection |
| llm/bias_processor.py | LLM-based bias processing |
- main_go.md β RSS feed aggregator (Go)
- ner.md β NER processor (Go)
- mongo2chroma.md β Vector loading & semantic search
- hybrid.md β Hybrid search with BM25 reranking
- dedupe.md β Article deduplication
- geminize.md β LLM article processing pipeline
- bias_processor.md β LLM bias processing
- ollamaai.md β Ollama CLI client for text/vision
- t5_bias.md β T5 bias detection system
- lora.md β LoRA training pipeline
- report.md β News report generation with LLM failover
- mgm.md β Video generation with SD Turbo + Kokoro TTS
- tts.md β TTS utilities
- dashboard.md β Streamlit data visualization dashboard
- dbscan.md β News article clustering
- utilities.md β Utility scripts reference
- makefile.md β All Makefile targets with pipeline graph
- browser-extension/README.md β Chrome/Firefox extension for real-time bias detection
Shell scripts for various pipeline tasks. See individual directory READMEs for full usage documentation.
| Directory | Description |
|---|---|
| db/README.md | Batch processing, vector generation, reporting scripts (37 scripts) |
| llm/README.md | LLM testing, SVO extraction, bias testing scripts (15 scripts) |
| ner/README.md | NER service management scripts |
| ner-hub/README.md | NER processor scripts |
| mgm/README.md | Video generation scripts |
| mp3/README.md | TTS batch processing scripts |
| vec/README.md | Memgraph vector database scripts |
| dbscan/README.md | Article clustering scripts |
| redist/README.md | Model training scripts |
| semantic/README.md | Semantic search scripts |
- .env.example β All environment variables
- docs/makefile_graph.png β Visual pipeline diagram
| Need... | Use |
|---|---|
| Load RSS feeds | make load β main_go.md |
| Extract entities | make ner β ner-hub/main.go |
| Search articles | hybrid.md β python db/hybrid.py |
| Generate vectors | make vector β mongo2chroma.md |
| Detect bias | make t5bias β llm/bias_processor.py |
| Create reports | make runreport β report.md |
| Text-to-speech | make mp3small β mgm.md |
| Train custom model | make lora-full β LoRA-train/README.md |
| Serve model | make lora-serve β LoRA-server/server.py |
| Browser extension | browser-extension/README.md |
| Dashboard | make dashboard β dashboard.md |
| Full pipeline | make testrun β makefile.md |
Copy .env.example to .env and fill in your values:
# MongoDB
MONGO_URI=mongodb://user:pass@host:27017
MONGO_USER=root
MONGO_PASS=your_password_here
# LLM APIs
GEMINI_API_KEY=your_gemini_api_key
GROQ_API_KEY=your_groq_api_key
OLLAMA_HOST=localhost:11434
# Services
NER_URL=http://localhost:8100/extract
T5_PORT=1337
CHROMA_PATH=./chroma_dbSee .env.example for the complete list.
propaganda/
βββ rss/ # RSS feed aggregator (Go)
βββ Makefile # Pipeline tasks
βββ config/ # Feed configs
βββ db/ # Database scripts
β βββ mongo2chroma.py
β βββ hybrid.py
β βββ geminize.py
β βββ report.py
βββ ner-hub/ # Named Entity Recognition (Go)
βββ llm/ # LLM processing
βββ t5/ # T5 bias detection
βββ mgm/ # Video generation
βββ front/ # React web UI
βββ back/ # Express API
βββ dashboard/ # Streamlit dashboard
βββ docs/ # Documentation
cd front && npm install && npm startAPI server:
cd back && node server.jscd dashboard && streamlit run app.pyMIT β 100% local, no API keys required (except Gemini optional).