# Darija YouTube Shorts Automation
A fully free, locally-run pipeline that watches Moroccan Darija YouTube channels, downloads long-form videos, transcribes and scores them for highlights, auto-crops to 9:16, burns in Arabic captions and channel branding, and publishes Shorts to YouTube on a schedule, with a daily performance report.
No paid APIs, no cloud LLM calls. Transcription, highlight scoring, cropping, and captioning all run locally.
> **Status:** solo side project, actively being built out. Watcher, processing pipeline, QC gate, publisher, reporter, and scheduler are all implemented; production-scale reliability (see Known issues) is still being worked on. See `docs/progress.md` for the full build log.
## How it works
```mermaid
%%{
init: {
'theme': 'base',
'themeVariables': {
'fontFamily': '"Virgil", "Comic Sans MS", "Cascadia Code", cursive, monospace',
'primaryColor': '#e7f5ff',
'primaryTextColor': '#1e1e1e',
'primaryBorderColor': '#1971c2',
'textColor': '#1e1e1e',
'lineColor': '#1e1e1e',
'secondaryColor': '#ebfbee',
'tertiaryColor': '#fff9db',
'edgeLabelBackground': '#ffffff',
'clusterTextColor': '#1e1e1e',
'signalColor': '#e67e22',
'errorColor': '#c92a2a'
}
}
}%%
flowchart LR
A[Watcher RSS poll] --> B[Downloader yt-dlp]
B --> C[Processor transcribe, score, crop, caption]
C --> D[QC Gate dedup + score + format + throttle]
D --> E[Publisher YouTube Data API]
E --> F[Reporter daily digest]
S[(SQLite state.db)]
A -.-> S
B -.-> S
C -.-> S
D -.-> S
E -.-> S
F -.-> S
style A fill:#e7f5ff,stroke:#1971c2,stroke-width:2px,color:#1e1e1e;
style B fill:#e7f5ff,stroke:#1971c2,stroke-width:2px,color:#1e1e1e;
style C fill:#fff9db,stroke:#f59f00,stroke-width:2px,color:#1e1e1e;
style D fill:#ffe3e3,stroke:#c92a2a,stroke-width:2px,color:#1e1e1e;
style E fill:#ebfbee,stroke:#2b8a3e,stroke-width:2px,color:#1e1e1e;
style F fill:#f3d9fa,stroke:#862e9c,stroke-width:2px,color:#1e1e1e;
style S fill:#ffffff,stroke:#1e1e1e,stroke-width:2px,color:#1e1e1e;
```
Every stage r …