HELIOS — self-hosted broadcast pipeline for the AIMarket ecosystem. Template in, voiced video out, queued to YouTube — private until you approve.
Project description
HELIOS — broadcast layer of the AIMarket ecosystem
Template in, voiced video out, queued to your YouTube — private until you approve.
MIT · self-hosted · POST-only · no engagement bots.
🌐 Language: English · Русский · Español
In the myth, Helios drives the chariot of the sun across the sky — light, rhythm, visibility.
HELIOS is the broadcast satellite of the AICOM / AIMarket ecosystem: render ecosystem explainers, upload to @My-AI-Factory, keep everything private until a human says go.
Channel: @My-AI-Factory · playlist
Landing: alexar76.github.io/helios · source: landing/index.html
Repo: github.com/alexar76/helios
Monitor: Alien Monitor — click the HELIOS node for cached YouTube stats
Integration guide: helios-integration.md
| Role | Render MP4 → upload YouTube (private) → operator approve → public |
| Screenwriter | CALLIOPE — LLM scripts grounded in MNEMOSYNE (shared with DIOSCURI) |
| Ops | Director — LLM metadata review + queue priority (DeepSeek default) |
Why HELIOS exists
The ecosystem ships constantly — releases, oracles, courses, live demos. Manual build_series.py + upload_youtube.py in PromoMaterials does not scale. HELIOS is the dedicated broadcast engine: one job queue, one audit trail, one human gate before anything goes public.
Three minds (who does what)
| Entity | Myth | Job | Touches voiceover? |
|---|---|---|---|
| CALLIOPE | Muse of epic poetry | Pitch topics, write scripts from GitHub + demo corpus | Yes (new videos) |
| Director | Broadcast ops | Review title/description, prioritize queue | No |
| Operator | Human | Studio review → helios approve |
No |
Backfill episodes (PromoMaterials S1 E10+, Season 2) use human-authored yaml — CALLIOPE does not rewrite them.
Charter (non-negotiable)
- POST-only — our channel only; no likes, comments, or engagement bots.
- Grounded creation — CALLIOPE cites MNEMOSYNE (READMEs, releases, live demos); backfill stays human yaml.
- Private-first — every upload starts
private;helios approvefor public. - Human gate — operator watches every video in YouTube Studio before approve.
- Fail-soft — if HELIOS is down, Factory and DIOSCURI keep running.
Features
| Feature | What it means |
|---|---|
| Job queue | Idempotent jobs, daily upload cap (~9/day), crash-safe worker lock |
| Renderer | TTS (say on macOS, edge-tts on Linux) + ffmpeg + burned-in captions + SRT |
| YouTube API | Resumable upload, captions, playlist routing |
| Backfill | Upload existing PromoMaterials renders without re-encoding |
| CALLIOPE | helios calliope pitch/write/enqueue — MNEMOSYNE-grounded scripts |
| Director | LLM metadata review (DeepSeek default) |
| DIOSCURI hook | Release events → shared HELIOS_QUEUE_PATH jsonl |
| Alien Monitor | GET /health — cached YouTube stats for the graph node |
| Audit | Append-only data/audit.jsonl for every state transition |
Architecture
flowchart TB
subgraph sources["Content & knowledge (read-only)"]
GH["GitHub READMEs / releases"]
DEMO["Live demo endpoints"]
PM["PromoMaterials MP4 + yaml"]
MN["MNEMOSYNE — mnemosyne.json<br/>(DIOSCURI sync)"]
GH --> MN
DEMO --> MN
end
subgraph triggers["Triggers"]
CLI["CLI — helios enqueue / calliope"]
DC["DIOSCURI — release event"]
CRON["cron — helios worker"]
end
subgraph helios["HELIOS core"]
Q["Queue store<br/>queue.json"]
ING["Ingest — HELIOS_QUEUE_PATH jsonl"]
CAL["CALLIOPE — screenwriter<br/>BM25 + AEGIS + LLM"]
DIR["Director — metadata QA"]
WK["Worker — render → upload"]
REN["Renderer — TTS + ffmpeg"]
YTU["YouTube client — OAuth"]
AUD["audit.jsonl"]
HC["GET /health"]
end
subgraph output["Output"]
YT["YouTube @My-AI-Factory<br/>(private)"]
OP["Operator — Studio + approve"]
PUB["public video"]
MON["Alien Monitor"]
end
MN --> CAL
PM -->|backfill| Q
CLI --> CAL
CAL -->|script.yaml| Q
DC -->|jsonl job| ING
ING --> Q
CRON --> WK
Q --> DIR
DIR --> WK
WK --> REN
REN --> YTU
YTU --> YT
YT --> OP
OP -->|helios approve| PUB
WK --> AUD
WK --> HC
HC --> MON
Job phases: backfill (PromoMaterials backlog) → creator (CALLIOPE) → steady (release-shorts).
Status flow: pending → rendering → uploading → awaiting_approval → published
Quick start (pip)
cd helios
pip install -e ".[dev]"
cp helios.config.example.yaml helios.config.yaml
cp .env.example .env
# Required: YOUTUBE_CLIENT_SECRET, YOUTUBE_TOKEN, DEEPSEEK_API_KEY
# CALLIOPE: DIOSCURI_DATA_DIR=/path/to/dioscuri/data (reads mnemosyne.json)
helios auth
helios calliope stats # MNEMOSYNE loaded?
helios calliope editorial-status # weekly quota + scout cadence
helios calliope pitch # topic ideas (manual)
helios worker # also runs editorial scout when due
helios approve job_...
Backfill (existing renders)
helios backfill-scan
helios backfill-enqueue -n 10 # queue only; upload when quota allows
helios worker --max-jobs 4 # conservative if YouTube quota is tight
Quick start (Docker)
cp helios.config.example.yaml helios.config.yaml
cp .env.example .env
docker compose up -d --build
docker compose exec helios helios worker
Container: non-root, read-only rootfs, cap_drop: ALL, health on :8791/health.
Configuration
Secrets in .env; tuning in helios.config.yaml (never commit real values).
| Variable | Purpose |
|---|---|
YOUTUBE_CLIENT_SECRET |
OAuth client JSON path |
YOUTUBE_TOKEN |
OAuth token JSON path |
HELIOS_LLM_PROVIDER |
deepseek (default) · anthropic · openai-compatible |
DEEPSEEK_API_KEY |
LLM for Director + CALLIOPE |
DIOSCURI_DATA_DIR |
Path to DIOSCURI data → reads mnemosyne.json |
HELIOS_MNEMOSYNE_PATH |
Override MNEMOSYNE file path |
HELIOS_QUEUE_PATH |
Shared jsonl ingest (DIOSCURI syndication) |
HELIOS_DATA_DIR |
Queue, audit, scripts, renders |
HELIOS_DRY_RUN |
1 = no YouTube upload |
helios.config.yaml key |
Default | Purpose |
|---|---|---|
limits.max_uploads_per_day |
9 |
YouTube quota margin |
calliope.enabled |
true |
CALLIOPE screenwriter |
calliope.editorial_enabled |
true |
Auto-scout on worker cron |
calliope.scout_interval_days |
3 |
Days between scout runs |
calliope.weekly_enqueue_quota |
3 |
Max new scripts/week |
calliope.backfill_pause_threshold |
8 |
Pause editorial while backfill > N |
director.enabled |
true |
Metadata review before upload |
Ecosystem position
aicom → builds products
dioscuri → community Q&A + MNEMOSYNE + release → HELIOS queue
PromoMaterials → human episode scripts & rendered MP4 (backfill)
helios → render + YouTube delivery ← you are here
alien-monitor → 3D graph + HELIOS / DIOSCURI live stats
Documentation
| Doc | Description |
|---|---|
| landing/index.html | Source for alexar76.github.io/helios — video gallery |
| docs/setup.md | Install, OAuth, Docker |
| docs/usage.md | CLI — CALLIOPE, Director, worker |
| docs/architecture.md | Components, data model |
| docs/security.md | Threat model |
| docs/runbook.md | Operator playbook |
Development
pip install -e ".[dev]"
PYTHONPATH=. pytest tests/ -q
bash scripts/ci_coverage_badge.sh # refresh docs/badges/coverage.svg
CI: .github/workflows/ci.yml (pytest + coverage badge + Docker) · Pages: .github/workflows/pages.yml → alexar76.github.io/helios
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file helios_broadcast-0.1.0.tar.gz.
File metadata
- Download URL: helios_broadcast-0.1.0.tar.gz
- Upload date:
- Size: 48.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66fccf920a132d8bf72db2fc2fadd2145715bda2bb3fb0bd81e2d0342e967b08
|
|
| MD5 |
cb01e76d915b1eff9eeebbf0680bcc1a
|
|
| BLAKE2b-256 |
3f9f4abcf56a2629e8490bb7fc1a2390302cc8cff28f6e147271378dd4d0feb9
|
File details
Details for the file helios_broadcast-0.1.0-py3-none-any.whl.
File metadata
- Download URL: helios_broadcast-0.1.0-py3-none-any.whl
- Upload date:
- Size: 48.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41ef0f8873dea2572a3b070d92cce6316004e5b99359c52f0d6089c81dc22381
|
|
| MD5 |
91c31af46b78a776ad6f43b82cb126eb
|
|
| BLAKE2b-256 |
c7dc2b31641f77b1a8b80977cf565262385ef7200a3497b48dca9b8c0255f598
|