ME4-YOUTUBE
ME4-YouTube
π§ Standards: Dieses Projekt folgt den ME4-Service-Bus-Standards v1.0.
π Verbindlich: HUB-Thought im openBrain β die Single source of truth.
β οΈ Abweichungen MΓSSEN in einem PR begrΓΌndet werden.
Service-ID:
ME4-YOUTUBE
Version: 1.2.001 Schnittstellen: MCP (stdio + ZMQ REQ/REP) + HTTP/REST + Framie-UI
YouTube Content Extraction Service fΓΌr die ME4-Suite:
Download β Video- und Audio-Download via
yt-dlpBeschreibung β VollstΓ€ndige Metadaten inkl. Description
Transkript β Manuell oder Auto-Generated, Multi-Language
Kommentare β Top-Kommentare via
yt-dlpLoadbalancer-MCP β Parallele Worker-Instanzen mit Health-Monitoring
Framie-UI β Embedded Live-Status-Display
Schnellstart
# Voraussetzungen: Python 3.11+, ffmpeg (optional, fΓΌr Audio-Konvertierung)
# Klonen / Installieren
cd D:\Entwicklung\ME4-YouTube
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
pip install -r requirements.txt
# Konfiguration (Beispiel kopieren, anpassen)
copy .env.example .env # Windows
# cp .env.example .env # macOS/Linux
# Starten
python main.py
# ODER (ΓΆffnet Framie-UI nicht automatisch)
python main.py --no-browserBeim Start ΓΆffnet sich automatisch die Framie-UI im Browser unter http://localhost:8770/ui/index.html.
Schnittstellen
Schnittstelle | Port | Zweck |
HTTP / REST |
| Browser, Menschen, externe Tools |
ZMQ Main |
| MCP-Service-Endpoint |
ZMQ Loadbalancer |
| MCP-Loadbalancer (parallele Worker) |
Worker-Pool |
| N parallele Worker-Instanzen (default: 2) |
MCP-Tools (ZMQ + stdio)
Tool | Beschreibung | Auth |
| Service-Health | public |
| UI-Manifest fΓΌr Cockpit | public |
| Detaillierter Status inkl. Worker-Pool | public |
| Live-Job-Status | public |
| YouTube Metadaten + Description | π |
| YouTube Transkript | π |
| YouTube Top-Kommentare | π |
| Video/Audio herunterladen | π |
| Komplette Pipeline (alle 4 Features) | π |
| SM-Producer anstoΓen | π |
| Geordneter Shutdown | π |
HTTP-Endpunkte
Pfad | Methode | Beschreibung |
| GET | Service-Info |
| GET | OpenAPI/Swagger UI |
| GET | Health (public) |
| GET | UI-Manifest (public) |
| GET | Live-Job-Status (public) |
| GET | SSE-Stream fΓΌr Framie-UI (public) |
| POST | Komplette Verarbeitung (π) |
| POST | Nur Metadaten (π) |
| POST | Nur Transkript (π) |
| POST | Nur Kommentare (π) |
| POST | Video-Download (π) |
| POST | SM-Producer triggern (π) |
| GET | Framie Live-Status-Display |
π = X-API-Key Header erforderlich (oder Dev-Mode wenn API_KEY="")
Beispiele
HTTP (curl)
# Metadaten + Beschreibung
curl -X POST http://localhost:8770/api/metadata \
-H "X-API-Key: ob-youtube-key-2026" \
-H "Content-Type: application/json" \
-d '{"url":"https://youtu.be/dQw4w9WgXcQ"}'
# Komplette Verarbeitung (alle Features)
curl -X POST http://localhost:8770/api/process \
-H "X-API-Key: ob-youtube-key-2026" \
-H "Content-Type: application/json" \
-d '{
"url":"https://youtu.be/dQw4w9WgXcQ",
"download":false,
"include_description":true,
"include_transcript":true,
"include_comments":true,
"language":"de",
"max_comments":100
}'ZMQ (Python)
import zmq, json
ctx = zmq.Context()
sock = ctx.socket(zmq.REQ)
sock.connect("tcp://127.0.0.1:5570")
sock.send_json({
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "process",
"arguments": {
"url": "https://youtu.be/dQw4w9WgXcQ",
"api_key": "ob-youtube-key-2026",
}
}
})
print(sock.recv_json())MCP stdio (Claude Code / Agenten)
{
"mcpServers": {
"me4-youtube": {
"command": "python",
"args": ["D:/Entwicklung/ME4-YouTube/main.py", "--mcp-stdio"]
}
}
}Loadbalancer-MCP (parallele Verarbeitung)
Der Service bringt einen eingebauten Loadbalancer-MCP mit. Agenten kΓΆnnen Jobs direkt an den Loadbalancer schicken, der sie auf freie Worker verteilt:
sock.connect("tcp://127.0.0.1:5571")
sock.send_json({
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "process",
"arguments": {
"url": "https://youtu.be/dQw4w9WgXcQ",
"api_key": "ob-youtube-key-2026",
}
}
})Strategien: round_robin, least_loaded, random (default: least_loaded)
SM-Producer Anbindung
Der Service kann direkt die SM-Producer-Pipeline (ME4-SMproducer-3) anstoΓen:
curl -X POST http://localhost:8770/api/sm-produce \
-H "X-API-Key: ob-youtube-key-2026" \
-H "Content-Type: application/json" \
-d '{
"url":"https://youtu.be/dQw4w9WgXcQ",
"transcript":"Volltext...",
"language":"de",
"workflow":"default"
}'Der Aufruf wird an http://localhost:3001/api/sm-produce weitergeleitet.
Konfiguration via SM_PRODUCER_URL und SM_PRODUCER_API_KEY in .env.
Framie-UI
Beim Start des Services ΓΆffnet sich automatisch die Framie-UI im Browser:
KPIs: aktive Jobs, erledigt, Fehler, Worker-Status
Live-Stream ΓΌber Server-Sent Events
Worker-Liste mit Idle/Busy/Down-Status
Letzte 15 Jobs in Tabelle
Event-Log
URL: http://localhost:8770/ui/index.html
Tests
pip install pytest pytest-asyncio
pytest
# Mit Coverage
pip install pytest-cov
pytest --cov=app --cov-report=term-missingKonfiguration (.env)
Siehe .env.example fΓΌr alle Optionen.
Wichtige Variablen:
API_KEYβ API-Key (leer = Dev-Mode)WORKER_COUNTβ Anzahl paralleler Worker (default: 2)LOADBALANCER_STRATEGYβround_robin|least_loaded|randomSM_PRODUCER_URLβ SM-Producer-Pipeline-URLDOWNLOAD_DIRβ Zielordner fΓΌr Downloads
Schnittstellen-Standard
Konform zu MCP_ZMQ_STANDARD.md:
ZMQ REQ/REP mit JSON-RPC 2.0
API-Key Auth
UI-Manifest
Standard-Tools (
ping,get_manifest,health,shutdown)
Architektur
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ME4-YouTube (Service-ID: ME4-YOUTUBE) β
β β
β ββββββββββββββββββ βββββββββββββββββββ β
β β HTTP API β β ZMQ Main β β
β β :8770 β β :5570 β β
β β + Framie-UI β β MCP REQ/REP β β
β ββββββββββ¬ββββββββ ββββββββββ¬βββββββββ β
β β β β
β βββββββββββ¬ββββββββββ β
β βΌ β
β βββββββββββββββββββββββ β
β β WorkerPool β β
β β (Load-Balancer) β β
β β ZMQ :5571 ββββββ Loadbalancer-MCP β
β βββββββββββ¬ββββββββββββ β
β β β
β βββββββββββββΌββββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββ βββββββββββ βββββββββββ β
β βworker-01β βworker-02β βworker-03β (jeweils β
β β :8771 β β :8772 β β :8773 β Orchestrator) β
β βββββββββββ βββββββββββ βββββββββββ β
β β
β ββββββββββββββββββ β
β β SM-Producer β β
β β HTTP :3001 β β
β ββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββJeder Worker hat:
eigenen HTTP-Server (fΓΌr eingehende Jobs vom Loadbalancer)
einen
Orchestrator(fΓΌhrt die Pipeline aus)Status-Updates landen im globalen
StatusTrackerβ Framie-Stream