| Crates.io | awful_news_vibes |
| lib.rs | awful_news_vibes |
| version | 0.1.1 |
| created_at | 2025-10-22 10:18:37.065444+00 |
| updated_at | 2025-10-22 10:18:37.065444+00 |
| description | Daily news meta-analysis pipeline with AI-powered clustering and D3 visualizations |
| homepage | https://github.com/graves/awful_news_vibes |
| repository | https://github.com/graves/awful_news_vibes |
| max_upload_size | |
| id | 1895406 |
| size | 293,776 |
Daily news meta-analysis pipeline with AI-powered clustering and visualization.
Analyzes news articles from multiple outlets, clusters related stories, extracts narrative patterns, and generates interactive D3 visualizations revealing media framing, emotional tone, and coverage dynamics.
awful_ajcargo build --release
Create ~/.config/awful_aj/config.yaml:
api_key: "YOUR_API_KEY"
api_base: "http://localhost:5001/v1" # or OpenAI/Anthropic endpoint
model: "qwen3_30b_a3"
# Fetch from HTTP API (default)
cargo run --release
# Specify output directory
cargo run --release -- --output-dir ./viz
# Use local API files (server-side)
cargo run --release -- --api-dir ./api
| Option | Description | Default |
|---|---|---|
-o, --output-dir <DIR> |
Output directory for generated files | out |
-c, --config <PATH> |
Path to config file (overrides AJ_CONFIG) |
~/.config/awful_aj/config.yaml |
--cluster-config <PATH> |
Separate LLM config for cluster compression | Same as --config |
--vibe-config <PATH> |
Separate LLM config for insights/meta-analysis | Same as --config |
--api-dir <PATH> |
Local API directory (reads JSON from disk) | HTTP mode |
# Use different LLMs for compression vs analysis
cargo run --release -- \
--cluster-config fast-llm.yaml \
--vibe-config slow-llm.yaml
# Process local API files
cargo run --release -- \
--api-dir /data/news_api \
--output-dir /var/www/viz
# Custom everything
cargo run --release -- \
-c ~/my-llm-config.yaml \
-o ./output \
--api-dir ./local-cache
AJ_CONFIG: Path to config fileAJ_CONFIG_DIR: Base config directoryAJ_TEMPLATE_DIR: Custom template directoryAJ_TEMPLATE_CLUSTER: Cluster compression template nameAJ_TEMPLATE_INSIGHTS: Insights template nameAJ_TEMPLATE_FINAL: Final post template nameRUST_LOG: Logging level (info, debug, trace)When using --api-dir, expected structure:
api/
├── 2025-10-21/
│ ├── morning.json
│ ├── afternoon.json
│ └── evening.json
├── 2025-10-22/
│ ├── morning.json
│ ├── afternoon.json
│ └── evening.json
JSON format matches https://news.awfulsec.com/api/{YYYY-MM-DD}/{slot}.json
out/
├── index.json # Date index for visualization picker
└── 2025-10-21/
├── clusters.full.json # Complete cluster data
├── insights.full.json # Meta-analysis insights
├── meta_post.json # Daily summary (JSON)
├── meta_post.md # Daily summary (Markdown)
├── viz.lifecycles.json # Story lifecycles
├── viz.momentum.json # Coverage velocity
├── viz.divergence.json # Narrative framing differences
├── viz.emotion.json # Emotional temperature
├── viz.compass.json # Topic positioning
├── viz.clouds.json # Word frequency
├── viz.fingerprints.json # Multi-dimensional characteristics
├── viz.silences.json # Notable absences
├── viz.entities.json # Entity co-mention graph
└── viz.index.json # Metadata
Open daily_analysis.html in a browser to view:
# Info level (default)
cargo run --release
# Debug level
RUST_LOG=debug cargo run --release
# Trace level (very verbose)
RUST_LOG=trace cargo run --release
MIT
Built with awful_aj for LLM orchestration.