# gumsak/vimeo-scraper architecture

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

- Interactive diagram: https://gitdiagram.com/gumsak/vimeo-scraper
- Repository: https://github.com/gumsak/vimeo-scraper

## Overview

This is a command-line Vimeo downloader. Its workflow accepts a video or showcase URL (and optional password), selects a single-video or playlist crawl, retrieves media segments, and assembles playable video/audio files in the videos output directory. The README documents public and private downloads; the excerpts show segment retrieval and assembly, but omit some spider callbacks and crawler wiring, so uncertain links are not drawn.

Main entry points: [`src/vimeo_scraper.py`](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py) (Scraper entry), [`src/segments_decoder.py`](https://github.com/gumsak/vimeo-scraper/blob/master/src/segments_decoder.py) (Segment decoder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["CLI and crawling"]
  node_scraper["Scraper entry<br/>[vimeo_scraper.py]"]
  node_url_kind["URL classification<br/>[vimeo_scraper.py]"]
  node_single_spider["Single-video spider<br/>[vimeo_scraper.py]"]
  node_playlist_spider["Playlist spider<br/>[vimeo_scraper.py]"]
end

subgraph group_acquire["Media acquisition"]
  node_auth["Password and tokens<br/>[vimeo_scraper.py]"]
  node_metadata["Video metadata<br/>[vimeo_scraper.py]"]
  node_segments["Segment retrieval<br/>[vimeo_scraper.py]"]
  node_segment_download["Segment downloads<br/>[vimeo_scraper.py]"]
end

subgraph group_output["Assembly and output"]
  node_video_dir[("videos directory")]
  node_assembly["Media assembly<br/>[vimeo_scraper.py]"]
  node_decoder["Segment decoder"]
end

node_user(("CLI user"))
node_vimeo(("Vimeo"))
node_ffmpeg["FFmpeg"]

node_user -->|"provides URL"| node_scraper
node_scraper -->|"classifies URL"| node_url_kind
node_scraper -->|"starts crawl"| node_single_spider
node_scraper -->|"starts crawl"| node_playlist_spider
node_single_spider -->|"requests pages"| node_vimeo
node_playlist_spider -->|"requests pages"| node_vimeo
node_single_spider -->|"handles password"| node_auth
node_playlist_spider -->|"handles password"| node_auth
node_single_spider -->|"extracts data"| node_metadata
node_playlist_spider -->|"extracts data"| node_metadata
node_metadata -->|"gets segment URLs"| node_segments
node_segments -->|"requests segments"| node_vimeo
node_segments -->|"downloads segments"| node_segment_download
node_segment_download -->|"writes files"| node_video_dir
node_assembly -->|"calls helpers"| node_decoder
node_decoder -->|"reads and writes"| node_video_dir
node_decoder -->|"encodes media"| node_ffmpeg
node_assembly -->|"cleans temporary files"| node_video_dir

click node_scraper "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_url_kind "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_single_spider "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_playlist_spider "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_auth "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_metadata "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_segments "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_segment_download "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_assembly "https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py"
click node_decoder "https://github.com/gumsak/vimeo-scraper/blob/master/src/segments_decoder.py"

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_scraper,node_url_kind,node_single_spider,node_playlist_spider,node_user toneBlue
class node_auth,node_metadata,node_segments,node_segment_download toneAmber
class node_video_dir,node_assembly,node_decoder toneMint
class node_vimeo,node_ffmpeg toneIndigo
```

## Components

### CLI and crawling

- [Scraper entry](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [URL classification](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Single-video spider](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Playlist spider](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`

### Media acquisition

- [Password and tokens](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Video metadata](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Segment retrieval](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Segment downloads](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`

### Assembly and output

- **videos directory**
- [Media assembly](https://github.com/gumsak/vimeo-scraper/blob/master/src/vimeo_scraper.py): `src/vimeo_scraper.py`
- [Segment decoder](https://github.com/gumsak/vimeo-scraper/blob/master/src/segments_decoder.py): `src/segments_decoder.py`

### Other components

- **CLI user**
- **Vimeo**
- **FFmpeg**

## Connections

- CLI user → Scraper entry: provides URL
- Scraper entry → URL classification: classifies URL
- Scraper entry → Single-video spider: starts crawl
- Scraper entry → Playlist spider: starts crawl
- Single-video spider → Vimeo: requests pages
- Playlist spider → Vimeo: requests pages
- Single-video spider → Password and tokens: handles password
- Playlist spider → Password and tokens: handles password
- Single-video spider → Video metadata: extracts data
- Playlist spider → Video metadata: extracts data
- Video metadata → Segment retrieval: gets segment URLs
- Segment retrieval → Vimeo: requests segments
- Segment retrieval → Segment downloads: downloads segments
- Segment downloads → videos directory: writes files
- Media assembly → Segment decoder: calls helpers
- Segment decoder → videos directory: reads and writes
- Segment decoder → FFmpeg: encodes media
- Media assembly → videos directory: cleans temporary files
