Skip to content

infinition/AcidPulse

Repository files navigation

AcidPulse

Self-hosted dashboard and pipeline for turning playlists, RSS feeds, articles, and PDFs into concise Markdown notes and a weekly email digest.

AcidPulse is designed for a small home server or NAS as the always-on orchestrator, with summaries generated by a local Ollama instance running elsewhere on your LAN.

image

Features

  • Monitor YouTube playlists and RSS/Atom feeds.
  • Add ad-hoc URLs for YouTube videos, articles, remote PDFs, and uploaded PDFs.
  • Summarize content with local Ollama models.
  • Classify summaries as news, tech, or deep.
  • Write Obsidian-ready Markdown notes with YAML frontmatter.
  • Send a weekly HTML email digest.
  • Manage sources, queue, settings, and logs from a LAN dashboard.

Architecture

Home server / NAS
  - Docker container
  - FastAPI dashboard
  - APScheduler jobs
  - SQLite state
  - Source discovery and content extraction
  - Obsidian Markdown writer

Ollama host
  - Any reachable machine running Ollama
  - Exposes Ollama HTTP API on the LAN

If Ollama is offline, discovery can still run and queued items are processed later.

Quick Start

  1. Clone the repository.
git clone <repo-url> acid-pulse
cd acid-pulse
  1. Create runtime folders and config.
mkdir -p data obsidian
cp .env.example .env
  1. Edit .env.

Important values:

IMAGE_NAME=ghcr.io/infinition/acid-pulse:latest
HOST_BIND_IP=127.0.0.1
HOST_WEB_PORT=8765
HOST_DATA_DIR=./data
HOST_OBSIDIAN_DIR=./obsidian

OLLAMA_HOST=http://your-ollama-host:11434
OLLAMA_MODEL_SUMMARY=qwen2.5:14b
OLLAMA_MODEL_CLASSIFIER=llama3.1:8b

SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
MAIL_TO=

For LAN access, set HOST_BIND_IP to your server or NAS LAN IP. Keep it as 127.0.0.1 for local-only access.

  1. Start the container.
docker compose pull
docker compose up -d
  1. Open the dashboard.
http://<host>:8765

Docker Image

The default Compose file uses the published GHCR image:

ghcr.io/infinition/acid-pulse:latest

Available tags are created by GitHub Actions:

  • latest on the default branch;
  • branch tags such as main;
  • version tags such as v1.0.0;
  • immutable sha-... tags.

For local development builds, use the dev override:

docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build

Publishing To GHCR

The repository includes a GitHub Actions workflow at:

.github/workflows/docker-publish.yml

On pushes to main or master, and on v*.*.* tags, it builds and pushes the Docker image to:

ghcr.io/infinition/acid-pulse

No extra registry secret is required when publishing from the same GitHub repository. The workflow uses the built-in GITHUB_TOKEN with packages: write permission.

After the first publish, check the package visibility in GitHub Packages. GHCR packages can be private by default depending on repository/account settings.

Ollama

AcidPulse does not run LLMs inside the container. It calls an existing Ollama server over HTTP.

Example setup on the Ollama machine:

ollama pull qwen2.5:14b
ollama pull llama3.1:8b

Make sure the Ollama API is reachable from the Docker host. Test from the host:

curl http://your-ollama-host:11434/api/tags

You can change the Ollama host and model names from the dashboard CONFIG tab.

Dashboard

Tabs:

  • OVERVIEW: metrics, live feed, manual batch and digest buttons.
  • QUEUE: item status, retry, and delete actions.
  • SOURCES: monitored YouTube playlists and RSS feeds.
  • INGEST: ad-hoc URLs, bulk URLs, and PDF upload.
  • EVENTS: full event log.
  • CONFIG: Ollama, YouTube API fallback key, SMTP, schedules, and behavior settings.

Scheduling

Configured through .env or the CONFIG tab:

  • DAILY_CHECK_HOUR: daily source discovery hour.
  • RSS_CHECK_INTERVAL_MIN: RSS discovery interval.
  • WEEKLY_DIGEST_DAY: digest day.
  • WEEKLY_DIGEST_HOUR: digest hour.
  • MAX_ITEMS_PER_RUN: max queued items processed per batch.

YouTube Notes

AcidPulse uses yt-dlp for playlist discovery and transcripts. YouTube captions can rate-limit (HTTP 429) if retried too aggressively. The app includes backoff behavior for this.

Optional:

  • YOUTUBE_API_KEY: used only as a fallback for playlist discovery through the YouTube Data API.
  • YT_COOKIES_PATH: optional cookies file for private or age-gated content.

A simple YouTube Data API key does not provide public transcripts. If captions are unavailable or rate-limited, a future audio transcription backend such as Whisper can be added.

Email Digest

The manual and scheduled digest use SMTP settings from CONFIG or .env.

The dashboard logs each mail stage:

  • collect done items from the last 7 days;
  • validate SMTP config;
  • connect to SMTP;
  • start TLS;
  • authenticate;
  • send message.

Some providers no longer support basic SMTP authentication. In that case, use a provider that supports app passwords/API-key SMTP, or add a provider-specific OAuth/Graph backend.

Obsidian Output

Markdown notes are written under:

<HOST_OBSIDIAN_DIR>/AcidPulse/

Each note includes frontmatter:

---
title: "..."
kind: youtube
source_url: "..."
author: "..."
published: 2026-04-25
processed: 2026-04-26
duration_s: 1840
word_count: 0
style: tech
tags:
  - acid-pulse
  - youtube
  - tech
---

CLI

docker exec acid-pulse python -m src.main --stats
docker exec acid-pulse python -m src.main --run-now
docker exec acid-pulse python -m src.main --send-digest

Inspect the SQLite state:

docker exec acid-pulse sqlite3 /data/state.db "SELECT id,kind,status,title FROM items LIMIT 20"

Publishing Safety

Do not commit:

  • .env
  • data/
  • obsidian/
  • cookies.txt
  • SQLite database files
  • runtime-config.json
  • generated ZIP archives

These are ignored by .gitignore.

Resource Use

At idle the container is lightweight: FastAPI, APScheduler, and SQLite. Content fetching is mostly network-bound. LLM summarization runs on your external Ollama host, not inside the container.

License

MIT License. See LICENSE for details.

About

Self-hosted dashboard and pipeline for turning playlists, RSS feeds, articles, and PDFs into concise Markdown notes and a weekly email digest.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors