# zouhirdev/fitgirl-ff-link-extractor architecture

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

- Interactive diagram: https://gitdiagram.com/zouhirdev/fitgirl-ff-link-extractor
- Repository: https://github.com/zouhirdev/fitgirl-ff-link-extractor

## Overview

FitGirl FuckingFast Link Extractor is a single-file desktop app for finding host links on a FitGirl page, letting users select files, resolving their direct download URLs in a browser, and copying results. The main workflow runs page fetching and browser extraction on background threads, then schedules UI updates. The README also documents selective scraping and Cloudflare bypass; the sampled source shows these mechanisms, but excerpts omit some wiring and browser setup details.

Main entry points: [`ff_grabber.py`](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py) (Tkinter app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Desktop interface"]
  node_app["Tkinter app<br/>[ff_grabber.py]"]
  node_selection["Link selection<br/>[ff_grabber.py]"]
  node_results["Results display<br/>[ff_grabber.py]"]
  node_clipboard["Clipboard copy<br/>[ff_grabber.py]"]
end

subgraph group_discovery["Link discovery"]
  node_page_fetch["Page fetch<br/>[ff_grabber.py]"]
  node_link_parse["Host link parsing<br/>[ff_grabber.py]"]
end

subgraph group_resolution["Link resolution"]
  node_browser_detect["Browser detection<br/>[ff_grabber.py]"]
  node_browser_extract["Browser extraction<br/>[ff_grabber.py]"]
  node_redirect_capture["Redirect capture<br/>[ff_grabber.py]"]
end

node_user(("User"))
node_fitgirl["FitGirl page"]
node_ff_host["FuckingFast host"]
node_browser["Chrome browser"]

node_user -->|"enters URL"| node_app
node_app -->|"starts fetch"| node_page_fetch
node_page_fetch -->|"requests page"| node_fitgirl
node_page_fetch -->|"passes HTML"| node_link_parse
node_link_parse -->|"returns host links"| node_app
node_app -->|"populates choices"| node_selection
node_user -->|"selects files"| node_selection
node_selection -->|"starts extraction"| node_app
node_app -->|"finds executable"| node_browser_detect
node_app -->|"starts extraction"| node_browser_extract
node_browser_extract -->|"drives browser"| node_browser
node_browser_extract -->|"opens selected links"| node_ff_host
node_browser_extract -->|"injects and polls"| node_redirect_capture
node_redirect_capture -->|"reads redirects"| node_browser
node_browser_extract -->|"schedules results"| node_app
node_app -->|"updates output"| node_results
node_user -->|"copies links"| node_clipboard
node_results -->|"provides text"| node_clipboard
node_clipboard -->|"copies URLs"| node_user

click node_app "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_page_fetch "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_link_parse "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_selection "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_browser_detect "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_browser_extract "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_redirect_capture "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_results "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py"
click node_clipboard "https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.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_app,node_selection,node_results,node_clipboard,node_user,node_browser toneBlue
class node_page_fetch,node_link_parse toneAmber
class node_browser_detect,node_browser_extract,node_redirect_capture toneMint
class node_fitgirl,node_ff_host toneIndigo
```

## Components

### Desktop interface

- [Tkinter app](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Link selection](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Results display](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Clipboard copy](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`

### Link discovery

- [Page fetch](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Host link parsing](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`

### Link resolution

- [Browser detection](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Browser extraction](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`
- [Redirect capture](https://github.com/zouhirdev/fitgirl-ff-link-extractor/blob/main/ff_grabber.py): `ff_grabber.py`

### Other components

- **User**
- **FitGirl page**
- **FuckingFast host**
- **Chrome browser**

## Connections

- User → Tkinter app: enters URL
- Tkinter app → Page fetch: starts fetch
- Page fetch → FitGirl page: requests page
- Page fetch → Host link parsing: passes HTML
- Host link parsing → Tkinter app: returns host links
- Tkinter app → Link selection: populates choices
- User → Link selection: selects files
- Link selection → Tkinter app: starts extraction
- Tkinter app → Browser detection: finds executable
- Tkinter app → Browser extraction: starts extraction
- Browser extraction → Chrome browser: drives browser
- Browser extraction → FuckingFast host: opens selected links
- Browser extraction → Redirect capture: injects and polls
- Redirect capture → Chrome browser: reads redirects
- Browser extraction → Tkinter app: schedules results
- Tkinter app → Results display: updates output
- User → Clipboard copy: copies links
- Results display → Clipboard copy: provides text
- Clipboard copy → User: copies URLs
