├── .github └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── secure_share.md ├── README.md ├── FAQ.md └── conf.md /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | 18 | 19 | **Describe the bug** 20 | A clear and concise description of what the bug is. 21 | Before reporting a bug, please check if you are using the **latest version**. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. windows - without version] 25 | - Browser [e.g. chrome, firefox - without version] 26 | - Auth [e.g. default, sideloading, proxy] 27 | 28 | 34 | -------------------------------------------------------------------------------- /secure_share.md: -------------------------------------------------------------------------------- 1 | ## Share data 2 | 3 | If you have a problem, it may be necessary to share your log or other data with me. 4 | The log file can help me with error analysis, but may contain sensitive information. 5 | You should therefore never share your log file publicly! 6 | 7 | Therefore, if you are willing to provide me with data, you should encrypt it so that only I and no one else can read it. 8 | 9 | ### How to encrypt 10 | 11 | 1. Download the [latest version of `age`](https://github.com/FiloSottile/age/releases) 12 | 2. Unzip the archive 13 | 3. Copy the file into the directory where the `fansyloader` file is located (or deal with how `age` works) 14 | 4. Navigate with a console into the directory 15 | 5. Encrypt the log: `age -o log.age -r age14dfxpv8rzxr2mulmdv8zh3lxkj40jpu0n4j6flamdt330q5tefkqzsxdsj config/fansyloader.log` 16 | 6. Upload the newly created `log.age` file to your issue 17 | 18 | ### Public keys 19 | 20 | * Age: `age14dfxpv8rzxr2mulmdv8zh3lxkj40jpu0n4j6flamdt330q5tefkqzsxdsj` 21 | * GPG: [keys.openpgp.org](https://keys.openpgp.org/search?q=montroly%40protonmail.com) 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fansyloader - The fancy loader 2 | 3 | Fansyloader tries to solve the problem that it seems to be difficult for most people to install the Python interpreter or use Github. 4 | For this Fansyloader allows you to download your content from Onlyfans and Fansly easily and quickly, 5 | without reading long installation instructions or making complicated configurations. 6 | 7 | Leave a star if you like it. 🌟 8 | 9 | ## Using 10 | 11 | 1. Download the [last released version](https://github.com/montroly/fansyloader/releases) 12 | 2. Unpack the download 13 | 3. Open a bash and navigate to the directory. (For Windows the use of the Powershell is recommended). 14 | 4. (Optional) `./fansyloader setup` 15 | 5. Start 16 | 17 | ```bash 18 | ./fansyloader 19 | ``` 20 | 21 | **Credits:** This project would not have been possible without the work of @hippothon, @OFfriend and @DIGITALCRIMINAL (±S). 22 | They cleared many barriers during their work on [OnlyFans DataScraper](https://github.com/DIGITALCRIMINALS/OnlyFans). 23 | 24 | ## Configuration 25 | 26 | Fansyloader creates a configuration directory at first startup, which contains a configuration file `config/config.toml`. 27 | This file can be opened and modified with a text editor and contains an explanation for most parameters. 28 | 29 | More information can be [found here](./conf.md) 30 | 31 | ## Troubleshooting 32 | 33 | After the download is started, only the progress bars and no error messages are displayed. 34 | So if there are problems, you should look into the log file in the `config` directory. 35 | Alternatively, `show_progress_bar` can be set to `false` in the configuration file. 36 | 37 | More information can be found in the [FAQ](./FAQ.md). 38 | If you can't find a solution to your problem, open an issue and pay attention to [how to share data safely](secure_share.md). 39 | 40 | ## Enjoy what you see? 41 | 42 | Give me a tip: 43 | 44 | ```text 45 | BTC bc1qtwpc4pr4qzmf0e0a74pp9v22pee0ltmx0tv2v5 46 | ETH 0xceAFb01aF935b781724954314597542fFd6B3Ff9 47 | XMR 44mvKqQAJYm4xgfAgyjguUiTRGtAXp1Uz1giQoHyTASRWyMDMVzwWRkCAu9AynQhBAUmdVoUfMqyWVykQ5i9bgFL27tgT8Z 48 | ``` 49 | 50 | ## Disclaimer 51 | 52 | The contributors to this software are not responsible for what their users do with it or how they use it. 53 | 54 | -------------------------------------------------------------------------------- /FAQ.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | #### Where can I find the source code? 4 | 5 | Nowhere. The source code is not public. 6 | 7 | #### Are you planning to publish the source code? 8 | 9 | No. 10 | 11 | #### How can I switch between Onlyfans and Fansly? 12 | 13 | You can set a default value in `config.toml` under `provider`. 14 | Alternatively you can call fansyloader with flags 15 | 16 | ```bash 17 | # For onlyfans 18 | ./fansyloader --onlyfans 19 | # For fansly 20 | ./fansyloader --fansly 21 | ``` 22 | 23 | #### Why is something new not scrapped? 24 | 25 | Fansyloader remembers what it has already downloaded and skips it. 26 | Thus, it is faster and does not stress the providers' websites so much. 27 | However, if something new has been acquired, it will not be recognized because it will be skipped. 28 | As a solution, there are two options: 29 | 30 | 1. the crowbar: delete the file `config/db.sqlite`. 31 | 2. elegant: 32 | 33 | ```bash 34 | # remove skip for all users 35 | fansyloader db unset-skip 36 | 37 | # remove skip for one user 38 | fansyloader db unset-skip --username awesome-user 39 | ``` 40 | 41 | #### What do I do if I don't care about the load on the providers webiste? 42 | 43 | Set in the configuration `[Download] enable_optimizations = false` 44 | 45 | #### Why can I perform a maximum of 20 parallel downloads? 46 | 47 | The question is, when was the last time you watched 20 videos in parallel? 48 | 49 | #### Can I speed up the download? 50 | 51 | Yes, you can increase the `request_limit` value in the configuration or set it to `0` to disable the limit. 52 | You can also use `max_downloads` to increase the number of simultaneous downloads. 53 | 54 | #### How do I verify the GPG signature? 55 | 56 | Fansyloader signs all binaries with a [GPG key](https://keys.openpgp.org/search?q=montroly%40protonmail.com) to prevent against unwanted modification of binaries. 57 | To validate the binary, download the signature file which ends in `.asc` for the binary you downloaded and use the gpg command line tool. 58 | 59 | ``` 60 | gpg --keyserver keys.openpgp.org --recv 6D7B6383B9212F1FA5E073D8D8D2D9BCE14926F5 61 | gpg --verify fansyloader-{{< version >}}.asc fansyloader-{{< version >}} 62 | ``` 63 | 64 | Look for the text `Good signature from "montroly "` to assert a good binary, 65 | despite warnings like `This key is not certified with a trusted signature!`. 66 | 67 | #### How do I know I can trust the program? 68 | 69 | Not at all, as usual. 70 | But you can check it with a virus scanner or online tool. 71 | You could monitor the network communication with Wireshark or something else. 72 | 73 | I can tell you that the program does not do anything different from what I have stated here. - It downloads files. 74 | 75 | #### Can I download something I can't see? Can I download something I didn't pay for? Can I download messages that I have not received? 76 | 77 | No 78 | -------------------------------------------------------------------------------- /conf.md: -------------------------------------------------------------------------------- 1 | ## Configuration 2 | 3 | fansyloader creates a folder `config` at the first start. 4 | In this folder you can find the configuration file `config.toml` and the log file `fansyloader.log`. 5 | The configuration file can be opened and edited with any text editor. 6 | 7 | ### Multiple configurations 8 | 9 | Fansyloader can also be started with a different configuration folder. 10 | For this purpose the `-c` flag can be used to specify another directory from which the configuration should be loaded. 11 | If the directory does not exist it will be created. 12 | 13 | ```bash 14 | # example 15 | ./fansyloader -c account-1-config 16 | ./fansyloader -c account-2-config 17 | ``` 18 | 19 | ### Path 20 | 21 | The path variable can be used to set the folders in which the files are stored. 22 | 23 | * `{{.Provider.Key}}` onlyfans 24 | * `{{.Provider.Name}}` OnlyFans 25 | * `{{.Provider.Domain}}` onlyfans.com 26 | * `{{.Model.Name}}` Name of the Model 27 | * `{{.Model.Username}}` Username of the Model 28 | * `{{.ApiType}}` Through which api the data was loaded. (Example: `posts`, or `messages`) 29 | * `{{.Download.Id}}` The ID of the download. Useful because it can be used to create a unique file name. 30 | * `{{.Download.Ext}}` File extension of the file to be saved (Example: `.png`, `.mp4`) 31 | * `{{.Download.CreateTime}}` Time at which the download was uploaded to the provider. 32 | * Can be formatted with `{{.Download.CreateTime.Format "2006-01-02_15:04:05"}}`. [Here](https://yourbasic.org/golang/format-parse-string-time-date-example/) you can find an overview of the possible formats. 33 | * `{{.Download.Type}}` video, gif, photo, etc. 34 | * `{{.Download.MimeType}}` The MimeType of the download (Example: `text/plain`) 35 | * `{{.Download.GroupId}}` Id of the object from where the download was obtained. For example, for post video downloads, it would be the id of the post. 36 | 37 | In addition, the path can be adjusted via functions. Functions change the output of variables. Available functions are: 38 | 39 | * Most [functions from sprig](http://masterminds.github.io/sprig/) 40 | * `cleanFilename` = Attempts to adapt a text so that it can be used as a file or folder name. 41 | * `꧁༺✿ ᵈᵉᵛⁱˡ᭄𝒈𝒊𝒓𝒍࿐✿༻꧂ / Камыр` becomes `꧁༺✿ ᵈᵉᵛⁱˡ᭄𝒈𝒊𝒓𝒍࿐✿༻꧂-Камы` 42 | * `slug` = Converts the text to a slug 43 | * `꧁༺✿ ᵈᵉᵛⁱˡ᭄𝒈𝒊𝒓𝒍࿐✿༻꧂ / Камыр` becomes `l-kamyr` 44 | * `toAscii` = Tries to convert the text to an ASCII string 45 | * `꧁༺✿ ᵈᵉᵛⁱˡ᭄𝒈𝒊𝒓𝒍࿐✿༻꧂ / Камыр` becomes `[-] l[-]]-Kamyr` 46 | 47 | ### Authentication methods 48 | 49 | To download the files, the tool must be associated with a user. 50 | The program also has to log in to onlyfans with your account. 51 | A direct login with your username and password is currently not possible, but other methods exist. 52 | 53 | fansyloader supports three different methods with their own advantages and disadvantages. 54 | The methods are briefly explained here and can be set in the configuration under `Auth.source`. 55 | 56 | - [Sideloading (Default)](#sideloading--default-) 57 | - [Proxy (Advanced)](#proxy--advanced-) 58 | - [Manual](#manual) 59 | 60 | #### Sideloading (Default) 61 | 62 | This method is set as default and is the easiest to use. 63 | Here fansyloader tries to find out where your browser stores the files for authentication (cookies). 64 | When it finds the files, it tries to read and use it. 65 | 66 | The disadvantage is that only a few browsers are supported and sometimes several attempts are required for authentication. 67 | 68 | * Supported browsers 69 | * Firefox (tested on **Windows and Linux**) 70 | * Chrome (tested on **Windows and Linux**) 71 | * Supported OS 72 | * Windows (tested) 73 | * Linux (tested) 74 | * MacOS 75 | 76 | **The best experience so far has been with Firefox.** 77 | In case of problems it may be possible that fansyloader has to be started as administrator. (see log) 78 | 79 | #### Proxy (Advanced) 80 | 81 | This method is the most stable but also the most complicated. 82 | Here fansyloader is set up as a proxy and acts like a MITM attack. 83 | This is not a risk for you, because you are running the proxy attack yourself. 84 | The advantage is that all browsers are supported and fansyloader acts like your own browser. 85 | 86 | How to set up? 87 | * Open the configuration file and set `Auth.source` to `proxy` 88 | * At the first start the file `ca.pem` is created in the `config` folder. 89 | * You need to add the file to your list of trusted CAs. 90 | * If you don't know how to do this, look for instructions on the Internet. 91 | * For example [here for Firefox](https://docs.vmware.com/en/VMware-Adapter-for-SAP-Landscape-Management/2.0.1/Installation-and-Administration-Guide-for-VLA-Administrators/GUID-0CED691F-79D3-43A4-B90D-CD97650C13A0.html). 92 | * After that, you need to set up your browser to use the proxy. 93 | * If you don't know how to do that, search online. 94 | * For example [here for Firefox](https://www.howtogeek.com/293213/how-to-configure-a-proxy-server-in-firefox/) 95 | * The proxy is an HTTP proxy and must also be enabled for HTTPS. 96 | * You must set the address `127.0.0.1` and port `8080` (Via configuration adjustable) 97 | * Go to onlyfans.com 98 | 99 | #### Manual 100 | 101 | This method works similar to the [onlyfans scraper](https://github.com/DIGITALCRIMINAL/OnlyFans). 102 | Just store the headers in the configuration under `[Auth.ManualAuth.Headers]` and 103 | set `Auth.source` to `manual`. 104 | --------------------------------------------------------------------------------