How hashirama/ofdl works
Purpose and Entry Point
OFDL is a desktop Python application for downloading media from OnlyFans subscriptions, including images, videos, highlights, and stories. Its executable entry point is OFDL.py, launched with Python 3.9+.
Paths:
• OFDL.py
• README.md
• requirements.txt
Desktop UI and User Interaction
The application uses PyQt5 for its graphical interface. The UI is responsible for collecting session-derived authentication values, displaying subscriptions after authentication, and exposing download-related actions. The README identifies an Options window where the user enters required request-header values.
Paths:
• OFDL.py
• settings.json
Authentication and Session Boundary
OFDL does not describe a built-in username/password login flow. Instead, users manually obtain cookie, useragent, and x-bc values from browser developer tools and enter them into the application. These values form the boundary between the local GUI and authenticated OnlyFans HTTP requests.
Likely persisted application/session settings are separated from code in:
• settings.json
• config.json
OnlyFans API / HTTP Integration
requests is the network runtime used to call OnlyFans endpoints. The authenticated request headers enable the app to fetch the user’s subscription list and subsequently retrieve media metadata or media URLs for selected content. Remote OnlyFans services are the primary external dependency; downloads are initiated from the local client rather than through a server-side backend.
Paths:
• OFDL.py
• requirements.txt
Subscription Discovery and Media Retrieval Flow
The primary control flow is:
1. Start the PyQt application.
2. Enter or load browser-derived authentication headers.
3. Fetch authenticated subscription data.
4. Select a subscription/content category.
5. Request associated media data and download images, videos, highlights, or stories to local storage.
This is a client-side workflow; authentication material and downloads remain under the local application’s control.
Paths:
• OFDL.py
• module/snafylno.py
Internal Module Boundary
The repository has a small module package area, with module/snafylno.py as the only identified supporting implementation file. This likely contains reusable downloader, API, or content-processing logic called by the top-level GUI script. OFDL.py is therefore the orchestration layer, while module/snafylno.py is the main internal extension boundary.
Paths:
• OFDL.py
• module/snafylno.py
Runtime and Configuration
The material runtime is Python 3.9+ with two declared dependencies: PyQt5 for the desktop UI and requests for HTTP. JSON files provide local configuration/state surfaces and should be treated as sensitive if they contain copied request headers or cookies.
Paths:
• requirements.txt
• config.json
• settings.json
Main entry points: OFDL.py PyQt interface · snafylno.py Media retrieval · settings.json Session headers · requirements.txt PyQt5 and requests
Components 13
Local Desktop App
- Application entry · Starts the PyQt desktop workflow.
OFDL.py - PyQt interface · Collects headers, shows subscriptions, and exposes download actions.
OFDL.py - Session headers · Browser-derived cookie, user agent, and x-bc values.
settings.json - App settings · Local configuration may contain sensitive session data.
config.json - Download orchestration · Coordinates discovery, selection, retrieval, and saving.
OFDL.py - Downloader module · Reusable API, download, or content-processing boundary.
module/snafylno.py - Subscription discovery
OFDL.py - Media retrieval · Retrieves selected images, videos, highlights, and stories.
module/snafylno.py - Downloaded media
- Python 3.9+
requirements.txt - PyQt5 and requests · Provides the GUI and authenticated HTTP client.
requirements.txt
OnlyFans
- Authenticated API · Provides subscriptions and media metadata or URLs.
- Media delivery · Serves downloadable media assets.
Connections 16
- Python 3.9+ → Application entry: runs
- PyQt5 and requests → PyQt interface: provides GUI
- PyQt5 and requests → Downloader module: provides HTTP
- Application entry → PyQt interface: starts
- App settings → Session headers: loads or persists
- PyQt interface → Session headers: collects
- PyQt interface → Download orchestration: initiates actions
- Download orchestration → Downloader module: delegates
- Session headers → Subscription discovery: authorizes
- Subscription discovery → Authenticated API: fetches subscriptions
- PyQt interface → Media retrieval: selects content
- Downloader module → Media retrieval: processes
- Session headers → Authenticated API: sends request headers
- Media retrieval → Authenticated API: requests metadata
- Media retrieval → Media delivery: downloads assets
- Media retrieval → Downloaded media: saves