# maxgfr/feedreel architecture

> Architecture diagram of the GitHub repository maxgfr/feedreel, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/maxgfr/feedreel
- Repository: https://github.com/maxgfr/feedreel

## Overview

FeedReel prepares daily RSS items, delegates editorial script creation to its agent skill, then renders a music-backed vertical video and caption. README-documented but unsampled pipeline internals are represented at the subsystem level.

Main entry points: [`src/pipeline/orchestrate.ts`](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/orchestrate.ts) (Pipeline Orchestrator), [`src/remotion/FeedReelVideo.tsx`](https://github.com/maxgfr/feedreel/blob/main/src/remotion/FeedReelVideo.tsx) (Video Composition), [`.claude/skills/feedreel/SKILL.md`](https://github.com/maxgfr/feedreel/blob/main/.claude/skills/feedreel/SKILL.md) (FeedReel Skill), [`src/pipeline/render.ts`](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/render.ts) (Video Rendering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Workflow"]
  node_skill["FeedReel Skill<br/>[SKILL.md]"]
  node_cli["CLI Commands<br/>[cli.ts]"]
  node_orchestrator["Pipeline Orchestrator<br/>[orchestrate.ts]"]
  node_config["Configuration<br/>[index.ts]"]
end

subgraph group_content["Feed Preparation"]
  node_rss["RSS Fetching<br/>[fetchRss.ts]"]
  node_dedup["Deduplication<br/>[dedup.ts]"]
  node_script["Script Handling<br/>[script.ts]"]
end

subgraph group_rendering["Video Rendering"]
  node_music["Music Assembly<br/>[music.ts]"]
  node_render["Video Rendering<br/>[render.ts]"]
  node_composition["Video Composition<br/>[FeedReelVideo.tsx]"]
  node_intro["Intro Scene<br/>[IntroScene.tsx]"]
  node_itemscene["News Item Scene<br/>[ItemScene.tsx]"]
  node_outro["Subscribe Outro<br/>[OutroScene.tsx]"]
  node_chrome["Video Chrome<br/>[Header.tsx]"]
end

subgraph group_outputs["Local Outputs"]
  node_database[("Dedup Database")]
  node_items["Daily Items"]
  node_scriptfile["Daily Script"]
  node_audio["Prepared Audio"]
  node_video["Daily MP4"]
  node_caption["Posting Caption"]
end

node_user(("User"))
node_feeds(("RSS Feeds"))
node_track["Background Track"]
node_renderer["Remotion Renderer"]
node_publisher(("Manual Publisher"))

node_user -->|"requests video"| node_skill
node_skill -->|"runs commands"| node_cli
node_cli -->|"dispatches"| node_orchestrator
node_orchestrator -->|"loads settings"| node_config
node_orchestrator -->|"fetches feeds"| node_rss
node_rss -->|"requests RSS"| node_feeds
node_orchestrator -->|"selects unseen"| node_dedup
node_dedup -->|"queries and marks"| node_database
node_orchestrator -->|"writes prepared items"| node_items
node_skill -->|"reads items"| node_items
node_skill -->|"writes script"| node_scriptfile
node_orchestrator -->|"loads script"| node_script
node_script -->|"reads script"| node_scriptfile
node_orchestrator -->|"assembles audio"| node_music
node_music -->|"reads track"| node_track
node_music -->|"produces audio"| node_audio
node_orchestrator -->|"renders video"| node_render
node_render -->|"renders composition"| node_composition
node_render -->|"uses Remotion"| node_renderer
node_composition -->|"renders intro"| node_intro
node_composition -->|"renders items"| node_itemscene
node_composition -->|"renders outro"| node_outro
node_composition -->|"renders header"| node_chrome
node_composition -->|"uses audio"| node_audio
node_render -->|"writes MP4"| node_video
node_orchestrator -->|"writes caption"| node_caption
node_orchestrator -->|"marks after success"| node_dedup
node_publisher -.->|"posts manually"| node_video
node_publisher -.->|"uses copy"| node_caption

click node_skill "https://github.com/maxgfr/feedreel/blob/main/.claude/skills/feedreel/SKILL.md"
click node_cli "https://github.com/maxgfr/feedreel/blob/main/src/cli.ts"
click node_orchestrator "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/orchestrate.ts"
click node_config "https://github.com/maxgfr/feedreel/blob/main/config/index.ts"
click node_rss "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/fetchRss.ts"
click node_dedup "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/dedup.ts"
click node_script "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/script.ts"
click node_music "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/music.ts"
click node_render "https://github.com/maxgfr/feedreel/blob/main/src/pipeline/render.ts"
click node_composition "https://github.com/maxgfr/feedreel/blob/main/src/remotion/FeedReelVideo.tsx"
click node_intro "https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/IntroScene.tsx"
click node_itemscene "https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/ItemScene.tsx"
click node_outro "https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/OutroScene.tsx"
click node_chrome "https://github.com/maxgfr/feedreel/blob/main/src/remotion/components/Header.tsx"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_skill,node_cli,node_orchestrator,node_config,node_user toneBlue
class node_rss,node_dedup,node_script toneAmber
class node_music,node_render,node_composition,node_intro,node_itemscene,node_outro,node_chrome toneMint
class node_database,node_items,node_scriptfile,node_audio,node_video,node_caption,node_track toneRose
class node_feeds,node_renderer,node_publisher toneIndigo
```

## Components

### Workflow

- [FeedReel Skill](https://github.com/maxgfr/feedreel/blob/main/.claude/skills/feedreel/SKILL.md): `.claude/skills/feedreel/SKILL.md`
- [CLI Commands](https://github.com/maxgfr/feedreel/blob/main/src/cli.ts): `src/cli.ts`
- [Pipeline Orchestrator](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/orchestrate.ts): `src/pipeline/orchestrate.ts`
- [Configuration](https://github.com/maxgfr/feedreel/blob/main/config/index.ts): `config/index.ts`

### Feed Preparation

- [RSS Fetching](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/fetchRss.ts): `src/pipeline/fetchRss.ts`
- [Deduplication](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/dedup.ts): `src/pipeline/dedup.ts`
- [Script Handling](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/script.ts): `src/pipeline/script.ts`

### Video Rendering

- [Music Assembly](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/music.ts): `src/pipeline/music.ts`
- [Video Rendering](https://github.com/maxgfr/feedreel/blob/main/src/pipeline/render.ts): `src/pipeline/render.ts`
- [Video Composition](https://github.com/maxgfr/feedreel/blob/main/src/remotion/FeedReelVideo.tsx): `src/remotion/FeedReelVideo.tsx`
- [Intro Scene](https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/IntroScene.tsx): `src/remotion/scenes/IntroScene.tsx`
- [News Item Scene](https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/ItemScene.tsx): `src/remotion/scenes/ItemScene.tsx`
- [Subscribe Outro](https://github.com/maxgfr/feedreel/blob/main/src/remotion/scenes/OutroScene.tsx): `src/remotion/scenes/OutroScene.tsx`
- [Video Chrome](https://github.com/maxgfr/feedreel/blob/main/src/remotion/components/Header.tsx): `src/remotion/components/Header.tsx`

### Local Outputs

- **Dedup Database**
- **Daily Items**
- **Daily Script**
- **Prepared Audio**
- **Daily MP4**
- **Posting Caption**

### Other components

- **User**
- **RSS Feeds**
- **Background Track**
- **Remotion Renderer**
- **Manual Publisher**

## Connections

- User → FeedReel Skill: requests video
- FeedReel Skill → CLI Commands: runs commands
- CLI Commands → Pipeline Orchestrator: dispatches
- Pipeline Orchestrator → Configuration: loads settings
- Pipeline Orchestrator → RSS Fetching: fetches feeds
- RSS Fetching → RSS Feeds: requests RSS
- Pipeline Orchestrator → Deduplication: selects unseen
- Deduplication → Dedup Database: queries and marks
- Pipeline Orchestrator → Daily Items: writes prepared items
- FeedReel Skill → Daily Items: reads items
- FeedReel Skill → Daily Script: writes script
- Pipeline Orchestrator → Script Handling: loads script
- Script Handling → Daily Script: reads script
- Pipeline Orchestrator → Music Assembly: assembles audio
- Music Assembly → Background Track: reads track
- Music Assembly → Prepared Audio: produces audio
- Pipeline Orchestrator → Video Rendering: renders video
- Video Rendering → Video Composition: renders composition
- Video Rendering → Remotion Renderer: uses Remotion
- Video Composition → Intro Scene: renders intro
- Video Composition → News Item Scene: renders items
- Video Composition → Subscribe Outro: renders outro
- Video Composition → Video Chrome: renders header
- Video Composition → Prepared Audio: uses audio
- Video Rendering → Daily MP4: writes MP4
- Pipeline Orchestrator → Posting Caption: writes caption
- Pipeline Orchestrator → Deduplication: marks after success
- Manual Publisher → Daily MP4: posts manually
- Manual Publisher → Posting Caption: uses copy
