├── .all-contributorsrc ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── question.md ├── LICENSE ├── README.md ├── RcloneLab.ipynb ├── VM's specification ├── DATE 2019.10.14 └── Specification (GPU-High-RAM).txt ├── _config.yml ├── docs ├── 01.png └── screenshot │ ├── ban.gif │ ├── cloud_commander.png │ ├── file_browser.png │ ├── jdownloader.png │ ├── netdata.png │ ├── netdata_upload.png │ ├── qbittorrent.png │ ├── rclonelab.png │ └── youtube-dl.png ├── img ├── title_cloud_commander.png ├── title_file_browser.png ├── title_jdownloader.png ├── title_netdata.png ├── title_qbittorrent.png ├── title_rclonelab.png ├── title_rtorrent_flood.png ├── title_utility.png ├── title_youtube-dl.png └── vector │ ├── font.ttf │ ├── netdata.svg │ └── title.eps └── res ├── jdownloader ├── sevenzipjbinding1509.jar └── sevenzipjbinding1509Linux.jar ├── qbittorrent ├── SearchPlugins.txt ├── archive │ ├── pool.txt │ ├── qbittorrent-nox_4.1.6.99_201907311051-6714-9c2a114_ubuntu18.04.1_amd64 │ └── qbittorrent-nox_4.1.6.deb ├── favicon.ico └── qBittorrent.conf ├── rclonelab ├── 01.png └── favicon.ico └── rtorrent └── rtorrent.rc /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "contributors": [ 8 | { 9 | "login": "MinorMole", 10 | "name": "MinorMole", 11 | "avatar_url": "https://avatars1.githubusercontent.com/u/11065194?v=4", 12 | "profile": "https://github.com/MinorMole", 13 | "contributions": [ 14 | "projectManagement", 15 | "maintenance", 16 | "code" 17 | ] 18 | }, 19 | { 20 | "login": "Sparoney", 21 | "name": "Sparoney", 22 | "avatar_url": "https://avatars1.githubusercontent.com/u/38852913?v=4", 23 | "profile": "https://github.com/Sparoney", 24 | "contributions": [ 25 | "ideas", 26 | "code" 27 | ] 28 | }, 29 | { 30 | "login": "ShixAJ", 31 | "name": "ShixAJ", 32 | "avatar_url": "https://avatars1.githubusercontent.com/u/37572790?v=4", 33 | "profile": "https://github.com/ShixAJ", 34 | "contributions": [ 35 | "ideas", 36 | "bug", 37 | "code" 38 | ] 39 | }, 40 | { 41 | "login": "K-E-N-W-A-Y", 42 | "name": "K-E-N-W-A-Y", 43 | "avatar_url": "https://avatars1.githubusercontent.com/u/25846872?v=4", 44 | "profile": "https://github.com/K-E-N-W-A-Y", 45 | "contributions": [ 46 | "bug" 47 | ] 48 | }, 49 | { 50 | "login": "r9isgod8", 51 | "name": "r9isgod8", 52 | "avatar_url": "https://avatars1.githubusercontent.com/u/9054411?v=4", 53 | "profile": "https://github.com/r9isgod8", 54 | "contributions": [ 55 | "ideas" 56 | ] 57 | }, 58 | { 59 | "login": "Xazmah", 60 | "name": "Xazmah", 61 | "avatar_url": "https://avatars2.githubusercontent.com/u/40501994?v=4", 62 | "profile": "https://github.com/Xazmah", 63 | "contributions": [ 64 | "userTesting" 65 | ] 66 | }, 67 | { 68 | "login": "gamesmews", 69 | "name": "Wolverlone", 70 | "avatar_url": "https://avatars0.githubusercontent.com/u/8480926?v=4", 71 | "profile": "https://github.com/gamesmews", 72 | "contributions": [ 73 | "bug", 74 | "code" 75 | ] 76 | } 77 | ], 78 | "contributorsPerLine": 7, 79 | "projectName": "RcloneLab", 80 | "projectOwner": "MinorMole", 81 | "repoType": "github", 82 | "repoHost": "https://github.com" 83 | } 84 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: gamesmews, MinorMole, ShixAJ 7 | 8 | --- 9 | 10 | ## **Please use Chrome browser to complete the following information:** 11 | 12 | **Describe the bug** 13 | A clear and concise description of what the bug is. 14 | 15 | **To Reproduce** 16 | Steps to reproduce the behavior: 17 | 1. Go to '...' 18 | 2. Click on '....' 19 | 3. Scroll down to '....' 20 | 4. See error 21 | 22 | **Expected behavior** 23 | A clear and concise description of what you expected to happen. 24 | 25 | **Screenshots** 26 | If applicable, add screenshots to help explain your problem. 27 | 28 | **Additional context** 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE]" 5 | labels: enhancement 6 | assignees: gamesmews, MinorMole, ShixAJ 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Describe this issue template's purpose here. 4 | title: "[QUESTION]" 5 | labels: question 6 | assignees: gamesmews, MinorMole, ShixAJ 7 | 8 | --- 9 | 10 | ## **Please use Chrome browser to complete the following information:** 11 | 12 | **What's your question** 13 | A detail of your question. 14 | 15 | **Screenshots** 16 | Add screenshots to help visualize your question. 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | ## WARNING!!! 6 | 7 | By using RcloneLab you can get ban in Google Colab. 8 |

9 | 10 |

11 | 12 | > **Why are hardware resources such as T4 GPUs not available to me?** 13 | The best available hardware is prioritized for users who use Colaboratory interactively rather than for long-running computations. Users who use Colaboratory for long-running computations may be temporarily restricted in the type of hardware made available to them, and/or the duration that the hardware can be used for. We encourage users with high computational needs to use Colaboratory’s UI with a local runtime. 14 | Please note that using Colaboratory for cryptocurrency mining is disallowed entirely, and may result in being banned from using Colab altogether. 15 | 16 | Source: https://research.google.com/colaboratory/faq.html 17 | 18 | ## WARNING!!! 19 | 20 | ## Introduction 21 | 22 | This GitHub project is an AIO download/upload/sync manager using the power of [**Google Colaboratory**](https://colab.research.google.com)'s [**10 Gbps ethernet**](https://github.com/szyha/RcloneLabArchive/tree/master/VM's%20specification), and it's **free!** It's come with **RcloneLab**, [**qBittorrent**](https://www.qbittorrent.org), [**JDownloader**](http://jdownloader.org/), [**YouTube-DL**](https://youtube-dl.org/), [**File Browser**](https://filebrowser.xyz/) and [**netdata**](https://www.netdata.cloud/). 23 | 24 | **RcloneLab** is a [**rclone**](https://rclone.org/) GUI for Google Colaboratory, similar to [**Rclone Browser**](https://github.com/MinorMole/RcloneBrowser-Portable). 25 | 26 | ## Featuring 27 | 28 |

29 |        30 |        31 |

32 |        33 | 34 |

35 | 36 | ## Contributors [![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors) 37 | 38 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
MinorMole
MinorMole

📆 🚧 💻
Sparoney
Sparoney

🤔 💻
ShixAJ
ShixAJ

🤔 🐛 💻
K-E-N-W-A-Y
K-E-N-W-A-Y

🐛
r9isgod8
r9isgod8

🤔
Xazmah
Xazmah

📓
Wolverlone
Wolverlone

🐛 💻
53 | 54 | 55 | 56 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! 57 | 58 | ## Usage [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/szyha/RcloneLabArchive/blob/master/RcloneLab.ipynb) 59 | 60 | 1. Open the IPython Notebook file in Google Colaboratory by clicking [**here**](https://colab.research.google.com/github/szyha/RcloneLabArchive/blob/master/RcloneLab.ipynb). 61 | 62 | 2. Click "Run cell" (play button) that you want and follow the instruction shown in the output. 63 | 64 | 65 | 66 | - We recommend to use [**Rclone Browser**](https://github.com/MinorMole/RcloneBrowser-Portable) for file browsing and get a path for RcloneLab. 67 | - Use [**Google Chrome Browser**](https://www.google.com/chrome/) for the best experience; if you face any issues with other browsers, it's the browser problem, not us. 68 | - Each account can have one VM session that lasts for 12 hours before purge itself; you can force the new session by goto **Runtime > Reset all runtimes...** But keep that in mind, you need to stay active in Colab console tab; if you lose the connection to the VM, it'll purge itself within 2 to 3 hours. 69 | 70 | ## Screenshot 71 | 72 |

73 | 74 | 75 |
76 | 77 | 78 | 79 |

80 | 81 | ## Licence [![GitHub license](https://img.shields.io/github/license/szyha/RcloneLabArchive.svg)](https://github.com/szyha/RcloneLabArchive/blob/master/LICENSE) 82 | 83 | Licenced under the [**MIT License**](https://github.com/szyha/RcloneLabArchive/blob/master/LICENSE). 84 | -------------------------------------------------------------------------------- /RcloneLab.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "orig_nbformat": 2, 6 | "file_extension": ".py", 7 | "mimetype": "text/x-python", 8 | "name": "python", 9 | "npconvert_exporter": "python", 10 | "pygments_lexer": "ipython3", 11 | "version": 3, 12 | "colab": { 13 | "name": "RcloneLab.ipynb", 14 | "provenance": [] 15 | }, 16 | "kernelspec": { 17 | "name": "python3", 18 | "display_name": "Python 3" 19 | }, 20 | "accelerator": "GPU" 21 | }, 22 | "cells": [ 23 | { 24 | "cell_type": "markdown", 25 | "metadata": { 26 | "colab_type": "text", 27 | "id": "HGctdySsIGFS" 28 | }, 29 | "source": [ 30 | "**📚 Use [Chrome](https://www.google.com/chrome/) for the best experience; if you face any issues with other browsers, it's the browser problem, not us.**\n", 31 | "\n", 32 | "**Found bug? Report it right [here](https://github.com/szyha/RcloneLabArchive/issues/new/choose). For more information, please visit our [GitHub](https://github.com/szyha/RcloneLabArchive/).**\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": { 38 | "colab_type": "text", 39 | "id": "6I2huqscJEPn" 40 | }, 41 | "source": [ 42 | "# \"RcloneLab\"/" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "metadata": { 48 | "cellView": "form", 49 | "colab_type": "code", 50 | "id": "iroeLPFdXbif", 51 | "colab": {} 52 | }, 53 | "source": [ 54 | "#@markdown

⬅️ Click Here Before Use RcloneLab

\n", 55 | "#@markdown

📝 Note: rerun this cell to change the config file.

\n", 56 | "Beta = False #@param {type:\"boolean\"}\n", 57 | "Setup_Time_Zone = False #@param {type:\"boolean\"}\n", 58 | "\n", 59 | "import os; from google.colab import files; from IPython.display import HTML, clear_output\n", 60 | "\n", 61 | "def upload_conf():\n", 62 | " try:\n", 63 | " display(HTML(\"

Please upload the config file of rclone (rclone.conf) from your computer.


\"))\n", 64 | " UploadConfig = files.upload().keys()\n", 65 | " if len(UploadConfig) == 0:\n", 66 | " return display(HTML(\"

File upload has been cancelled during upload file.


\"))\n", 67 | " elif len(UploadConfig) == 1:\n", 68 | " for fn in UploadConfig:\n", 69 | " if os.path.isfile(\"/content/\" + fn):\n", 70 | " get_ipython().system_raw(\"mv -f \" + \"\\\"\" + fn + \"\\\" /root/.rclone.conf && chmod 666 /root/.rclone.conf\")\n", 71 | " if Setup_Time_Zone:\n", 72 | " !sudo dpkg-reconfigure tzdata\n", 73 | " if os.path.isfile(\"/usr/bin/rclone\"):\n", 74 | " clear_output(wait=True)\n", 75 | " return display(HTML(\"

Config has been changed.


\"))\n", 76 | " else:\n", 77 | " if Beta:\n", 78 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && curl -s https://rclone.org/install.sh | sudo bash -s beta\")\n", 79 | " else:\n", 80 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && curl -s https://rclone.org/install.sh | sudo bash\")\n", 81 | " clear_output(wait=True)\n", 82 | " return display(HTML(\"

Installation has been successfully completed.


\"))\n", 83 | " else:\n", 84 | " clear_output(wait=True)\n", 85 | " return display(HTML(\"

File upload has been failed during upload file.


\"))\n", 86 | " else:\n", 87 | " for fn in UploadConfig:\n", 88 | " get_ipython().system_raw(\"rm -f \" + \"\\\"\" + fn + \"\\\"\")\n", 89 | " clear_output(wait=True)\n", 90 | " return display(HTML(\"

Please uploading only one file at a time.


\"))\n", 91 | " except:\n", 92 | " clear_output(wait=True)\n", 93 | " return display(HTML(\"

Error occurred during upload file.


\"))\n", 94 | "\n", 95 | "upload_conf()" 96 | ], 97 | "execution_count": 0, 98 | "outputs": [] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "metadata": { 103 | "cellView": "form", 104 | "colab_type": "code", 105 | "id": "RIr3CXMAGNdy", 106 | "colab": {} 107 | }, 108 | "source": [ 109 | "#@markdown

⬅️ Run This Cell to Use RcloneLab

\n", 110 | "# ============================= FORM ============================= #\n", 111 | "Mode = \"Config\" #@param [\"Config\", \"Copy\", \"Move\", \"Mount\", \"Sync\", \"Checker\", \"Deduplicate\", \"Remove Empty Directories\", \"Empty Trash\", \"qBittorrent\"]\n", 112 | "Compare = \"Size & Mod-Time\" #@param [\"Size & Mod-Time\", \"Size & Checksum\", \"Only Mod-Time\", \"Only Size\", \"Only Checksum\"]\n", 113 | "Source = \"\" #@param {type:\"string\"}\n", 114 | "Destination = \"\" #@param {type:\"string\"}\n", 115 | "Transfers = 20 #@param {type:\"slider\", min:1, max:20, step:1}\n", 116 | "Checkers = 20 #@param {type:\"slider\", min:1, max:20, step:1}\n", 117 | "#@markdown ---\n", 118 | "\n", 119 | "#@markdown

⚙️ Global Configuration ⚙️

\n", 120 | "Simple_Ouput = True #@param {type:\"boolean\"}\n", 121 | "Skip_files_that_are_newer_on_the_destination = False #@param {type:\"boolean\"}\n", 122 | "Skip_all_files_that_exist = False #@param {type:\"boolean\"}\n", 123 | "Do_not_cross_filesystem_boundaries = False\n", 124 | "Do_not_update_modtime_if_files_are_identical = False #@param {type:\"boolean\"}\n", 125 | "Large_amount_of_files_optimization = False\n", 126 | "Google_Drive_optimization = False #@param {type:\"boolean\"}\n", 127 | "Google_Drive_server_side_copy = False #@param {type:\"boolean\"}\n", 128 | "Dry_Run = False #@param {type:\"boolean\"}\n", 129 | "Output_Log_File = \"OFF\" #@param [\"OFF\", \"NOTICE\", \"INFO\", \"ERROR\", \"DEBUG\"]\n", 130 | "Extra_Arguments = \"\" #@param {type:\"string\"}\n", 131 | "\n", 132 | "#@markdown

↪️ Sync Configuration ↩️

\n", 133 | "Sync_Mode = \"Delete during transfer\" #@param [\"Delete during transfer\", \"Delete before transfering\", \"Delete after transfering\"]\n", 134 | "Track_Renames = False #@param {type:\"boolean\"}\n", 135 | "\n", 136 | "#@markdown

💞 Deduplicate Configuration 💞

\n", 137 | "Deduplicate_Mode = \"Interactive\" #@param [\"Interactive\", \"Skip\", \"First\", \"Newest\", \"Oldest\", \"Largest\", \"Rename\"]\n", 138 | "Deduplicate_Use_Trash = True #@param {type:\"boolean\"}\n", 139 | "# ================================================================ #\n", 140 | "\n", 141 | "import os, psutil; from IPython.display import HTML, clear_output; from IPython.utils.io import ask_yes_no\n", 142 | "\n", 143 | "def CheckProcess(process, command):\n", 144 | " for pid in psutil.pids():\n", 145 | " try:\n", 146 | " p = psutil.Process(pid)\n", 147 | " if process in p.name():\n", 148 | " for arg in p.cmdline():\n", 149 | " if command in str(arg): \n", 150 | " return True\n", 151 | " else:\n", 152 | " pass\n", 153 | " else:\n", 154 | " pass\n", 155 | " except:\n", 156 | " continue\n", 157 | "\n", 158 | "### Variable Declaration\n", 159 | "\n", 160 | "# Optimized for Google Colaboratory\n", 161 | "if Google_Drive_optimization:\n", 162 | " bufferC = \"--buffer-size 128M\"\n", 163 | "else:\n", 164 | " bufferC = \"--buffer-size 256M\"\n", 165 | "\n", 166 | "if Compare == \"Size & Checksum\":\n", 167 | " compareC = \"-c\"\n", 168 | "elif Compare == \"Only Mod-Time\":\n", 169 | " compareC = \"--ignore-size\"\n", 170 | "elif Compare == \"Only Size\":\n", 171 | " compareC = \"--size-only\"\n", 172 | "elif Compare == \"Only Checksum\":\n", 173 | " compareC = \"-c --ignore-size\"\n", 174 | "else:\n", 175 | " compareC = \"\"\n", 176 | "\n", 177 | "transfersC = \"--transfers \"+str(Transfers)\n", 178 | "checkersC = \"--checkers \"+str(Checkers)\n", 179 | "\n", 180 | "if Skip_files_that_are_newer_on_the_destination:\n", 181 | " skipnewC = \"-u\"\n", 182 | "else:\n", 183 | " skipnewC = \"\"\n", 184 | " \n", 185 | "if Skip_all_files_that_exist:\n", 186 | " skipexistC = \"--ignore-existing\"\n", 187 | "else:\n", 188 | " skipexistC = \"\"\n", 189 | " \n", 190 | "if Do_not_cross_filesystem_boundaries:\n", 191 | " nocrossfilesystemC = \"--one-file-system\"\n", 192 | "else:\n", 193 | " nocrossfilesystemC = \"\"\n", 194 | " \n", 195 | "if Do_not_update_modtime_if_files_are_identical:\n", 196 | " noupdatemodtimeC = \"--no-update-modtime\"\n", 197 | "else:\n", 198 | " noupdatemodtimeC = \"\"\n", 199 | "\n", 200 | "if Large_amount_of_files_optimization:\n", 201 | " filesoptimizeC = \"--fast-list\"\n", 202 | "else:\n", 203 | " filesoptimizeC = \"\"\n", 204 | " \n", 205 | "if Google_Drive_optimization:\n", 206 | " driveoptimizeC = \"--drive-chunk-size 128M --drive-acknowledge-abuse --drive-keep-revision-forever\"\n", 207 | "else:\n", 208 | " driveoptimizeC = \"\"\n", 209 | "\n", 210 | "if Google_Drive_server_side_copy:\n", 211 | " drivecopyC = \"--drive-server-side-across-configs=true\"\n", 212 | "elif Google_Drive_optimization:\n", 213 | " drivecopyC = \"--disable copy\"\n", 214 | "\n", 215 | "if Dry_Run:\n", 216 | " dryrunC = \"-n\"\n", 217 | "else:\n", 218 | " dryrunC = \"\"\n", 219 | " \n", 220 | "if Output_Log_File != \"OFF\":\n", 221 | " statsC = \"--log-file=/root/.rclone_log/rclone_log.txt\"\n", 222 | "else:\n", 223 | " if Simple_Ouput:\n", 224 | " statsC = \"-v --stats-one-line --stats=5s\"\n", 225 | " else:\n", 226 | " statsC = \"-v --stats=5s\"\n", 227 | " \n", 228 | "if Output_Log_File == \"INFO\":\n", 229 | " loglevelC = \"--log-level INFO\"\n", 230 | "elif Output_Log_File == \"ERROR\":\n", 231 | " loglevelC = \"--log-level ERROR\"\n", 232 | "elif Output_Log_File == \"DEBUG\":\n", 233 | " loglevelC = \"--log-level DEBUG\"\n", 234 | "else:\n", 235 | " loglevelC = \"\"\n", 236 | "\n", 237 | "if Sync_Mode == \"Delete during transfer\":\n", 238 | " syncmodeC = \"--delete-during\"\n", 239 | "elif Sync_Mode == \"Delete before transfering\":\n", 240 | " syncmodeC = \"--delete-before\"\n", 241 | "elif Sync_Mode == \"Delete after transfering\":\n", 242 | " syncmodeC = \"--delete-after\"\n", 243 | " \n", 244 | "if Track_Renames:\n", 245 | " trackrenamesC = \"--track-renames\"\n", 246 | "else:\n", 247 | " trackrenamesC = \"\"\n", 248 | " \n", 249 | "if Deduplicate_Mode == \"Interactive\":\n", 250 | " deduplicateC = \"interactive\"\n", 251 | "elif Deduplicate_Mode == \"Skip\":\n", 252 | " deduplicateC = \"skip\"\n", 253 | "elif Deduplicate_Mode == \"First\":\n", 254 | " deduplicateC = \"first\"\n", 255 | "elif Deduplicate_Mode == \"Newest\":\n", 256 | " deduplicateC = \"newest\"\n", 257 | "elif Deduplicate_Mode == \"Oldest\":\n", 258 | " deduplicateC = \"oldest\"\n", 259 | "elif Deduplicate_Mode == \"Largest\":\n", 260 | " deduplicateC = \"largest\"\n", 261 | "elif Deduplicate_Mode == \"Rename\":\n", 262 | " deduplicateC = \"rename\"\n", 263 | " \n", 264 | "if Deduplicate_Use_Trash:\n", 265 | " deduplicatetrashC = \"\"\n", 266 | "else:\n", 267 | " deduplicatetrashC = \"--drive-use-trash=false\"\n", 268 | " \n", 269 | "### rclone Execution\n", 270 | "\n", 271 | "if Output_Log_File != \"OFF\" and Mode != \"Config\":\n", 272 | " get_ipython().system_raw(\"mkdir -p -m 666 /root/.rclone_log/\")\n", 273 | " display(HTML(\"

Logging enables, rclone will not output log through the terminal, please wait until finished.


\"))\n", 274 | "\n", 275 | "if Mode == \"Config\":\n", 276 | " !rclone --config=/root/.rclone.conf config\n", 277 | "elif Mode == \"Copy\":\n", 278 | " !rclone --config=/root/.rclone.conf copy \"$Source\" \"$Destination\" $transfersC $checkersC $statsC $loglevelC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 279 | "elif Mode == \"Move\":\n", 280 | " !rclone --config=/root/.rclone.conf move \"$Source\" \"$Destination\" $transfersC $checkersC $statsC $loglevelC --delete-empty-src-dirs $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 281 | "elif Mode == \"Mount\":\n", 282 | " try:\n", 283 | " if not CheckProcess(\"rclone\", \"/content/\" + Source.split(\":\")[0] + \"/\"):\n", 284 | " if not os.path.exists(\"/content/\" + Source.split(\":\")[0] + \"/\"):\n", 285 | " get_ipython().system_raw(\"mkdir -p -m 666 '/content/\" + Source.split(\":\")[0] + \"/'\")\n", 286 | " get_ipython().system_raw(\"rclone --config=/root/.rclone.conf mount '$Source' '/content/\" + Source.split(\":\")[0] + \"/' $loglevelC $noupdatemodtimeC $bufferC $filesoptimizeC --drive-chunk-size 128M --drive-acknowledge-abuse --drive-keep-revision-forever $Extra_Arguments &\")\n", 287 | " except:\n", 288 | " pass\n", 289 | "elif Mode == \"Sync\":\n", 290 | " !rclone --config=/root/.rclone.conf sync \"$Source\" \"$Destination\" $transfersC $checkersC $statsC $loglevelC $syncmodeC $trackrenamesC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 291 | "elif Mode == \"Checker\":\n", 292 | " !rclone --config=/root/.rclone.conf check \"$Source\" \"$Destination\" $checkersC $statsC $loglevelC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 293 | "elif Mode == \"Deduplicate\":\n", 294 | " !rclone --config=/root/.rclone.conf dedupe \"$Source\" $checkersC $statsC $loglevelC --dedupe-mode $deduplicateC $deduplicatetrashC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 295 | "elif Mode == \"Remove Empty Directories\":\n", 296 | " !rclone --config=/root/.rclone.conf rmdirs \"$Source\" $statsC $loglevelC $dryrunC $Extra_Arguments\n", 297 | "elif Mode == \"Empty Trash\":\n", 298 | " !rclone --config=/root/.rclone.conf cleanup \"$Source\" $statsC $loglevelC $dryrunC $Extra_Arguments\n", 299 | "elif Mode == \"qBittorrent\":\n", 300 | " if Source == \"\":\n", 301 | " !chmod -R 666 /content/qBittorrent/ && rclone --config=/root/.rclone.conf move \"/content/qBittorrent/\" \"$Destination\" $transfersC $checkersC $statsC $loglevelC --delete-empty-src-dirs --exclude **/.unwanted/ $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $drivecopyC $dryrunC $Extra_Arguments\n", 302 | "\n", 303 | "### Log Output\n", 304 | " \n", 305 | "if Output_Log_File != \"OFF\" and Mode != \"Config\" and os.path.isfile(\"/root/.rclone_log/rclone_log.txt\"):\n", 306 | " ### Rename log file and output settings.\n", 307 | " get_ipython().system_raw(\"mv /root/.rclone_log/rclone_log.txt /root/.rclone_log/rclone_log_$(date +%Y-%m-%d_%H.%M.%S).txt\")\n", 308 | " with open(\"/root/.rclone_log/\" + Mode + \"_settings.txt\", \"w\") as f:\n", 309 | " f.write(\"Mode: \" + Mode + \\\n", 310 | " \"\\nCompare: \" + Compare + \\\n", 311 | " \"\\nSource: \\\"\" + Source + \\\n", 312 | " \"\\\"\\nDestination: \\\"\" + Destination + \\\n", 313 | " \"\\\"\\nTransfers: \" + str(Transfers) + \\\n", 314 | " \"\\nCheckers: \" + str(Checkers) + \\\n", 315 | " \"\\nSkip files that are newer on the destination: \" + str(Skip_files_that_are_newer_on_the_destination) + \\\n", 316 | " \"\\nSkip all files that exist: \" + str(Skip_all_files_that_exist) + \\\n", 317 | " \"\\nDo not cross filesystem boundaries: \" + str(Do_not_cross_filesystem_boundaries) + \\\n", 318 | " \"\\nDo not update modtime if files are identical: \" + str(Do_not_update_modtime_if_files_are_identical) + \\\n", 319 | " \"\\nDry-Run: \" + str(Dry_Run) + \\\n", 320 | " \"\\nOutput Log Level: \" + Output_Log_File + \\\n", 321 | " \"\\nExtra Arguments: \\\"\" + Extra_Arguments + \\\n", 322 | " \"\\\"\\nSync Moden: \" + Sync_Mode + \\\n", 323 | " \"\\nTrack Renames: \" + str(Track_Renames) + \\\n", 324 | " \"\\nDeduplicate Mode: \" + Deduplicate_Mode + \\\n", 325 | " \"\\nDeduplicate Use Trash: \" + str(Deduplicate_Use_Trash))\n", 326 | " ### Compressing log file.\n", 327 | " get_ipython().system_raw(\"rm -f /root/rclone_log.zip && zip -r -q -j -9 /root/rclone_log.zip /root/.rclone_log/ && rm -rf /root/.rclone_log/ && mkdir -p -m 666 /root/.rclone_log/\")\n", 328 | " ### Send Log\n", 329 | " if os.path.isfile(\"/root/rclone_log.zip\"):\n", 330 | " try:\n", 331 | " files.download(\"/root/rclone_log.zip\")\n", 332 | " get_ipython().system_raw(\"rm -f /root/rclone_log.zip\")\n", 333 | " display(HTML(\"

Sending log to your browser...


\"))\n", 334 | " except:\n", 335 | " get_ipython().system_raw(\"mv /root/rclone_log.zip /content/rclone_log_$(date +%Y-%m-%d_%H.%M.%S).zip\")\n", 336 | " display(HTML(\"

You can use file explorer to download the log file.



\"))\n", 337 | " else:\n", 338 | " clear_output(wait=True)\n", 339 | " display(HTML(\"

There is no log file.


\"))\n", 340 | "\n", 341 | "### Operation has been successfully completed.\n", 342 | "if os.path.isfile(\"/usr/bin/rclone\") == False:\n", 343 | " clear_output(wait=True)\n", 344 | " display(HTML(\"

❌ Please run the installation cell above first.


\"))\n", 345 | "elif Mode == \"qBittorrent\" and Source.strip() != \"\":\n", 346 | " display(HTML(\"

❌ Please empty the Source field in qBittorrent mode.


\"))\n", 347 | "elif Mode == \"Mount\" and Source.strip() == \"\":\n", 348 | " display(HTML(\"

❌ The Source field is empty.


\"))\n", 349 | "elif Mode != \"Config\":\n", 350 | " display(HTML(\"

✅ Operation has been successfully completed.


\"))" 351 | ], 352 | "execution_count": 0, 353 | "outputs": [] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": { 358 | "colab_type": "text", 359 | "id": "fkaNFMaxHDWz" 360 | }, 361 | "source": [ 362 | "# \"qBittorrent\"/" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "metadata": { 368 | "cellView": "form", 369 | "colab_type": "code", 370 | "id": "CmzYd3QGHB7d", 371 | "colab": {} 372 | }, 373 | "source": [ 374 | "# ============================= FORM ============================= #\n", 375 | "#@markdown

⬅️ Click Here to Install qBittorrent

\n", 376 | "#@markdown

❌ Don't use the mounted Google Drive as a save path for torrent; data corruption will most likely occur.

\n", 377 | "#@markdown

✅ The rclone method is recommended and always the safest.

\n", 378 | "Version = \"Newest\" #@param [\"Newest\", \"4.1.6\", \"4.0.3\"]\n", 379 | "# ================================================================ #\n", 380 | "\n", 381 | "import os, psutil, IPython, uuid, time\n", 382 | "import ipywidgets as widgets\n", 383 | "\n", 384 | "from IPython.display import HTML, clear_output\n", 385 | "from urllib.request import urlopen\n", 386 | "from google.colab import output\n", 387 | "\n", 388 | "class MakeButton(object):\n", 389 | " def __init__(self, title, callback):\n", 390 | " self._title = title\n", 391 | " self._callback = callback\n", 392 | " def _repr_html_(self):\n", 393 | " callback_id = 'button-' + str(uuid.uuid4())\n", 394 | " output.register_callback(callback_id, self._callback)\n", 395 | " template = \"\"\"\n", 396 | " \"\"\"\n", 402 | " html = template.format(title=self._title, callback_id=callback_id)\n", 403 | " return html\n", 404 | " \n", 405 | "def MakeLabel(description, button_style):\n", 406 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 407 | "\n", 408 | "def RandomGenerator():\n", 409 | " return time.strftime(\"%S\") + str(time.time()).split(\".\")[-1]\n", 410 | "\n", 411 | "def CheckProcess(process, command):\n", 412 | " for pid in psutil.pids():\n", 413 | " try:\n", 414 | " p = psutil.Process(pid)\n", 415 | " if process in p.name():\n", 416 | " for arg in p.cmdline():\n", 417 | " if command in str(arg): \n", 418 | " return True\n", 419 | " else:\n", 420 | " pass\n", 421 | " else:\n", 422 | " pass\n", 423 | " except:\n", 424 | " continue\n", 425 | "\n", 426 | "def Plugin_Installer(url):\n", 427 | " with urlopen(url) as story:\n", 428 | " story_words = []\n", 429 | " for line in story:\n", 430 | " line_words = line.decode('utf-8').split()\n", 431 | " for word in line_words:\n", 432 | " story_words.append(word)\n", 433 | " for word in story_words:\n", 434 | " get_ipython().system_raw(\"wget -q -P /root/.local/share/data/qBittorrent/nova3/engines/ \" + word + \" &\")\n", 435 | " \n", 436 | "def AutoSSH(name,port):\n", 437 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + name + \":80:localhost:\" + port + \" serveo.net &\")\n", 438 | "\n", 439 | "def Start_AutoSSH_QB():\n", 440 | " if CheckProcess(\"qbittorrent-nox\", \"\") != True:\n", 441 | " get_ipython().system_raw(\"qbittorrent-nox -d --webui-port=$Port_QB\")\n", 442 | " if CheckProcess(\"autossh\", Random_URL_QB) != True:\n", 443 | " AutoSSH(Random_URL_QB, Port_QB)\n", 444 | "\n", 445 | "def Start_Localhost_QB():\n", 446 | " try:\n", 447 | " clear_output(wait=True)\n", 448 | " !autossh -l $Random_URL_QB -M 0 -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:$Port_QB ssh.localhost.run\n", 449 | " except:\n", 450 | " Control_Panel_QB()\n", 451 | " Control_Panel_QB()\n", 452 | "\n", 453 | "def Control_Panel_QB():\n", 454 | " clear_output(wait=True)\n", 455 | " display(MakeLabel(\"✔ Successfully\", \"success\"), MakeButton(\"Recheck\", Start_AutoSSH_QB), MakeButton(\"Backup Website\", Start_Localhost_QB), HTML(\"

qBittorrent

\" \\\n", 456 | " \"Website

\"))\n", 457 | "\n", 458 | "try:\n", 459 | " try:\n", 460 | " Random_URL_QB\n", 461 | " except NameError:\n", 462 | " Random_URL_QB = \"qb\" + RandomGenerator()\n", 463 | " Port_QB = \"6006\"\n", 464 | " display(MakeLabel(\"Installing in Progress\", \"warning\"))\n", 465 | " get_ipython().system_raw(\"rm -rf /content/sample_data/\")\n", 466 | " if Version != \"4.0.3\":\n", 467 | " get_ipython().system_raw(\"mkdir -p -m 666 /root/.local/share/data/qBittorrent/nova3/engines/\")\n", 468 | " Plugin_Installer(\"https://szyha.github.io/RcloneLabArchive/res/qbittorrent/SearchPlugins.txt\")\n", 469 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 470 | " get_ipython().system_raw(\"apt update -qq -y && apt install autossh -qq -y\")\n", 471 | " if os.path.isfile(\"/usr/bin/qbittorrent-nox\") == False:\n", 472 | " if Version != \"Newest\":\n", 473 | " if Version == \"4.0.3\":\n", 474 | " get_ipython().system_raw(\"apt install qbittorrent-nox=4.0.3-1 -qq -y\")\n", 475 | " else:\n", 476 | " get_ipython().system_raw(\"apt install libtorrent-rasterbar9 -qq -y && wget -q https://szyha.github.io/RcloneLabArchive/res/qbittorrent/archive/qbittorrent-nox_$Version\\.deb -O /root/.qbittorrent-nox.deb && dpkg -i /root/.qbittorrent-nox.deb && rm -rf /root/.qbittorrent-nox.deb\")\n", 477 | " else:\n", 478 | " get_ipython().system_raw(\"yes \"\" | add-apt-repository ppa:qbittorrent-team/qbittorrent-stable && apt install qbittorrent-nox -qq -y\")\n", 479 | " get_ipython().system_raw(\"mkdir -p -m 666 /{content/qBittorrent,root/{.qBittorrent_temp,.config/qBittorrent}} && wget -q https://szyha.github.io/RcloneLabArchive/res/qbittorrent/qBittorrent.conf -O /root/.config/qBittorrent/qBittorrent.conf\")\n", 480 | " Start_AutoSSH_QB()\n", 481 | " Control_Panel_QB()\n", 482 | "except:\n", 483 | " clear_output(wait=True)\n", 484 | " display(MakeLabel(\"✘ Unsuccessfully\", \"danger\"))" 485 | ], 486 | "execution_count": 0, 487 | "outputs": [] 488 | }, 489 | { 490 | "cell_type": "markdown", 491 | "metadata": { 492 | "colab_type": "text", 493 | "id": "8uUbyNZHi8a5" 494 | }, 495 | "source": [ 496 | "# \"JDownloader\"/" 497 | ] 498 | }, 499 | { 500 | "cell_type": "code", 501 | "metadata": { 502 | "cellView": "form", 503 | "colab_type": "code", 504 | "id": "Mfg4A3KRjESb", 505 | "colab": {} 506 | }, 507 | "source": [ 508 | "#@markdown

⬅️ Click Here to Install JDownloader

\n", 509 | "\n", 510 | "import os, uuid, re, IPython\n", 511 | "import ipywidgets as widgets\n", 512 | "\n", 513 | "from glob import glob\n", 514 | "from IPython.display import HTML, clear_output\n", 515 | "from google.colab import output\n", 516 | "\n", 517 | "Email = widgets.Text(placeholder=\"*Required\", description=\"Email:\")\n", 518 | "Password = widgets.Text(placeholder=\"*Required\", description=\"Password:\")\n", 519 | "Device = widgets.Text(placeholder=\"Optional\", description=\"Name:\")\n", 520 | "SavePath = widgets.Dropdown(value=\"/content\", options=[\"/content\", \"/content/Downloads\"], description=\"Save Path:\")\n", 521 | "\n", 522 | "class MakeButton(object):\n", 523 | " def __init__(self, title, callback, style):\n", 524 | " self._title = title\n", 525 | " self._callback = callback\n", 526 | " self._style = style\n", 527 | " def _repr_html_(self):\n", 528 | " callback_id = 'button-' + str(uuid.uuid4())\n", 529 | " output.register_callback(callback_id, self._callback)\n", 530 | " if self._style != \"\":\n", 531 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button mod-\" + self._style\n", 532 | " else:\n", 533 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button\"\n", 534 | " template = \"\"\"\n", 535 | " \"\"\"\n", 541 | " html = template.format(title=self._title, callback_id=callback_id, style_html=style_html)\n", 542 | " return html\n", 543 | " \n", 544 | "def MakeLabel(description, button_style):\n", 545 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 546 | "\n", 547 | "def RefreshPath():\n", 548 | " if os.path.exists(\"/content/drive/\"):\n", 549 | " if os.path.exists(\"/content/drive/Shared drives/\"):\n", 550 | " SavePath.options = [\"/content\", \"/content/Downloads\", \"/content/drive/My Drive\"] + glob(\"/content/drive/My Drive/*/\") + glob(\"/content/drive/Shared drives/*/\")\n", 551 | " else:\n", 552 | " SavePath.options = [\"/content\", \"/content/Downloads\", \"/content/drive/My Drive\"] + glob(\"/content/drive/My Drive/*/\")\n", 553 | " else:\n", 554 | " SavePath.options = [\"/content\", \"/content/Downloads\"]\n", 555 | "\n", 556 | "def LoginForm():\n", 557 | " clear_output(wait=True)\n", 558 | " Email.value = \"\"\n", 559 | " Password.value = \"\"\n", 560 | " Device.value = \"\"\n", 561 | " RefreshPath()\n", 562 | " display(HTML(\"

If you don't have an account yet, please register here.

\"), HTML(\"
\"), Email, Password, Device, SavePath, MakeButton(\"Refresh\", RefreshPath, \"\"))\n", 563 | " if not os.path.exists(\"/content/drive/\"):\n", 564 | " display(HTML(\"*If you want to save in Google Drive please run the cell below.\"))\n", 565 | " display(HTML(\"
\"), MakeButton(\"Login\", CheckLogin, \"info\"))\n", 566 | " if os.path.isfile(\"/root/.JDownloader/cfg/org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json\"):\n", 567 | " display(MakeButton(\"Cancel\", Show, \"danger\"))\n", 568 | " \n", 569 | "def RestartForm():\n", 570 | " clear_output(wait=True)\n", 571 | " display(MakeLabel(\"Restart Confirm?\", \"\"), MakeButton(\"Confirm\", Restart, \"danger\"), MakeButton(\"Cancel\", Show, \"warning\"))\n", 572 | " \n", 573 | "def ExitForm():\n", 574 | " clear_output(wait=True)\n", 575 | " display(MakeLabel(\"Exit Confirm?\", \"\"), MakeButton(\"Confirm\", Exit, \"danger\"), MakeButton(\"Cancel\", Show, \"warning\"))\n", 576 | "\n", 577 | "def CheckLogin():\n", 578 | " try:\n", 579 | " if not Email.value.strip():\n", 580 | " ERROR = \"Email field is empty.\"\n", 581 | " THROW_ERROR\n", 582 | " if not \"@\" in Email.value and not \".\" in Email.value:\n", 583 | " ERROR = \"Email is an incorrect format.\"\n", 584 | " THROW_ERROR\n", 585 | " if not Password.value.strip():\n", 586 | " ERROR = \"Password field is empty.\"\n", 587 | " THROW_ERROR\n", 588 | " if not bool(re.match(\"^[a-zA-Z0-9]+$\", Device.value)) and Device.value.strip():\n", 589 | " ERROR = \"Only alphanumeric are allowed for the device name.\"\n", 590 | " THROW_ERROR\n", 591 | " Login()\n", 592 | " except:\n", 593 | " print(ERROR)\n", 594 | "\n", 595 | "def Login():\n", 596 | " clear_output(wait=True)\n", 597 | " if SavePath.value == \"/content\":\n", 598 | " get_ipython().system_raw(\"echo '{\\\"defaultdownloadfolder\\\" : \\\"/content\\\"}' > /root/.JDownloader/cfg/org.jdownloader.settings.GeneralSettings.json\")\n", 599 | " elif SavePath.value == \"/content/Downloads\":\n", 600 | " get_ipython().system_raw(\"mkdir -p -m 666 /content/Downloads\")\n", 601 | " get_ipython().system_raw(\"echo '{\\\"defaultdownloadfolder\\\" : \\\"/content/Downloads\\\"}' > /root/.JDownloader/cfg/org.jdownloader.settings.GeneralSettings.json\")\n", 602 | " else:\n", 603 | " get_ipython().system_raw(\"echo '{\\\"defaultdownloadfolder\\\" : \\\"\" + SavePath.value + \"\\\"}' > /root/.JDownloader/cfg/org.jdownloader.settings.GeneralSettings.json\")\n", 604 | " if Device.value.strip() == \"\":\n", 605 | " Device.value = Email.value\n", 606 | " get_ipython().system_raw(\"pkill -9 -e -f java\")\n", 607 | " get_ipython().system_raw(\"echo '{\\\"email\\\" : \\\"'\" + Email.value + \"'\\\", \\\"password\\\" : \\\"'\" + Password.value + \"'\\\", \\\"devicename\\\" : \\\"'\" + Device.value + \"'\\\", \\\"directconnectmode\\\" : \\\"LAN\\\"}' > /root/.JDownloader/cfg/org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json\")\n", 608 | " get_ipython().system_raw(\"java -jar /root/.JDownloader/JDownloader.jar -norestart -noerr -r &\")\n", 609 | " Show()\n", 610 | "\n", 611 | "def Restart():\n", 612 | " get_ipython().system_raw(\"pkill -9 -e -f java\")\n", 613 | " get_ipython().system_raw(\"java -jar /root/.JDownloader/JDownloader.jar -norestart -noerr -r &\")\n", 614 | " Show()\n", 615 | " \n", 616 | "def Exit():\n", 617 | " get_ipython().system_raw(\"pkill -9 -e -f java\")\n", 618 | " clear_output(wait=True)\n", 619 | " display(MakeButton(\"Start\", Restart, \"info\"))\n", 620 | " \n", 621 | "def Show():\n", 622 | " clear_output(wait=True)\n", 623 | " display(MakeLabel(\"Control Panel\", \"\"), HTML(\"

You can login to the WebUI by clicking here.

\"), HTML(\"

If the server didn't showup in 30 sec. please re-login.

\"), HTML(\"
\"), MakeButton(\"Re-Login\", LoginForm, \"info\"), MakeButton(\"Restart\", RestartForm, \"warning\"), MakeButton(\"Exit\", ExitForm, \"danger\"))\n", 624 | " \n", 625 | " \n", 626 | "if not os.path.isfile(\"/root/.JDownloader/JDownloader.jar\"):\n", 627 | " clear_output(wait=True)\n", 628 | " display(MakeLabel(\"Installing in Progress\", \"warning\"))\n", 629 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && apt install openjdk-8-jre-headless -qq -y && mkdir -p -m 666 /root/.JDownloader/libs && wget -q http://installer.jdownloader.org/JDownloader.jar -O /root/.JDownloader/JDownloader.jar && java -jar /root/.JDownloader/JDownloader.jar -norestart -h && wget -q https://szyha.github.io/RcloneLabArchive/res/jdownloader/sevenzipjbinding1509.jar -O /root/.JDownloader/libs/sevenzipjbinding1509.jar && wget -q https://szyha.github.io/RcloneLabArchive/res/jdownloader/sevenzipjbinding1509Linux.jar -O /root/.JDownloader/libs/sevenzipjbinding1509Linux.jar\")\n", 630 | " LoginForm()\n", 631 | "elif not os.path.isfile(\"/root/.JDownloader/cfg/org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json\"):\n", 632 | " LoginForm()\n", 633 | "else: \n", 634 | " Show()" 635 | ], 636 | "execution_count": 0, 637 | "outputs": [] 638 | }, 639 | { 640 | "cell_type": "code", 641 | "metadata": { 642 | "cellView": "form", 643 | "colab_type": "code", 644 | "id": "yCEJ7cJjo7XD", 645 | "colab": {} 646 | }, 647 | "source": [ 648 | "#@markdown

⬅️ Click Here to Mount Google Drive

\n", 649 | "#@markdown

⚠️ If you download the file directly to Google Drive, it might have data corruption, use this at your own risk!

\n", 650 | "#@markdown

✅ The rclone method is recommended and always the safest.

\n", 651 | "\n", 652 | "import os, uuid; import ipywidgets as widgets\n", 653 | "from IPython.display import clear_output\n", 654 | "from google.colab import drive, output\n", 655 | "\n", 656 | "class MakeButton(object):\n", 657 | " def __init__(self, title, callback, style):\n", 658 | " self._title = title\n", 659 | " self._callback = callback\n", 660 | " self._style = style\n", 661 | " def _repr_html_(self):\n", 662 | " callback_id = 'button-' + str(uuid.uuid4())\n", 663 | " output.register_callback(callback_id, self._callback)\n", 664 | " if self._style != \"\":\n", 665 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button mod-\" + self._style\n", 666 | " else:\n", 667 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button\"\n", 668 | " template = \"\"\"\n", 669 | " \"\"\"\n", 675 | " html = template.format(title=self._title, callback_id=callback_id, style_html=style_html)\n", 676 | " return html\n", 677 | " \n", 678 | "def MakeLabel(description, button_style):\n", 679 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 680 | " \n", 681 | "def DemountForm():\n", 682 | " clear_output(wait=True)\n", 683 | " display(MakeLabel(\"Demount Confirm?\", \"\"), MakeButton(\"Confirm\", Demount, \"danger\"), MakeButton(\"Cancel\", ShowGD, \"warning\"))\n", 684 | " \n", 685 | "def Demount():\n", 686 | " clear_output(wait=True)\n", 687 | " get_ipython().system_raw(\"pkill -9 -e -f drive\")\n", 688 | " !rm -rf /root/.config/Google/DriveFS/\n", 689 | " !echo \"If you want to mount Google Drive run this cell again.\"\n", 690 | " \n", 691 | "def ShowGD():\n", 692 | " try:\n", 693 | " RefreshPath()\n", 694 | " except:\n", 695 | " clear_output(wait=True)\n", 696 | " display(MakeLabel(\"Control Panel\", \"\"), MakeButton(\"Demount\", DemountForm, \"danger\"))\n", 697 | "\n", 698 | "while not os.path.exists(\"/content/drive\"):\n", 699 | " try:\n", 700 | " drive.mount(\"/content/drive\")\n", 701 | " clear_output(wait=True)\n", 702 | " except:\n", 703 | " clear_output(wait=True)\n", 704 | " \n", 705 | "ShowGD()" 706 | ], 707 | "execution_count": 0, 708 | "outputs": [] 709 | }, 710 | { 711 | "cell_type": "markdown", 712 | "metadata": { 713 | "colab_type": "text", 714 | "id": "X_o8umGH27Ke" 715 | }, 716 | "source": [ 717 | "# \"Youtube-DL\"/" 718 | ] 719 | }, 720 | { 721 | "cell_type": "code", 722 | "metadata": { 723 | "cellView": "form", 724 | "colab_type": "code", 725 | "id": "v_bqZeo83e-S", 726 | "colab": {} 727 | }, 728 | "source": [ 729 | "#@markdown

⬅️ Click Here to Use YouTube-DL

\n", 730 | "#@markdown

📝 Note: if you want to change an archive file just run this cell again.

\n", 731 | "Archive = False #@param {type:\"boolean\"}\n", 732 | "\n", 733 | "import os, uuid, urllib.parse\n", 734 | "import ipywidgets as widgets\n", 735 | "\n", 736 | "from glob import glob\n", 737 | "from urllib.parse import urlparse, parse_qs\n", 738 | "from IPython.display import HTML, clear_output, YouTubeVideo\n", 739 | "from IPython.utils.io import ask_yes_no\n", 740 | "from google.colab import output, files\n", 741 | "\n", 742 | "Links = widgets.Textarea(placeholder='''Video/Playlist Link\n", 743 | "(one link per line)''')\n", 744 | "\n", 745 | "VideoQ = widgets.Dropdown(options=[\"Best Quality (VP9 upto 4K)\", \"Best Compatibility (H.264 upto 1080p)\"])\n", 746 | "\n", 747 | "AudioQ = widgets.Dropdown(options=[\"Best Quality (Opus)\", \"Best Compatibility (M4A)\"])\n", 748 | "\n", 749 | "Subtitle = widgets.ToggleButton(value=True, description=\"Subtitle\", button_style=\"info\", tooltip=\"Subtitle\")\n", 750 | "\n", 751 | "SavePathYT = widgets.Dropdown(options=[\"/content\", \"/content/Downloads\"])\n", 752 | "\n", 753 | "AudioOnly = widgets.ToggleButton(value=False, description=\"Audio Only\", button_style=\"\", tooltip=\"Audio Only\")\n", 754 | "\n", 755 | "Resolution = widgets.Select(options=[\"Highest\", \"4K\", \"1440p\", \"1080p\", \"720p\", \"480p\", \"360p\", \"240p\", \"144p\"], value=\"Highest\")\n", 756 | "\n", 757 | "Extension = widgets.Select(options=[\"mkv\", \"webm\"], value=\"mkv\")\n", 758 | "\n", 759 | "UsernameYT = widgets.Text(placeholder=\"Username\")\n", 760 | "\n", 761 | "PasswordYT = widgets.Text(placeholder=\"Password\")\n", 762 | "\n", 763 | "SecAuth = widgets.Text(placeholder=\"2nd Factor Authentication\")\n", 764 | "\n", 765 | "VideoPW = widgets.Text(placeholder=\"Video Password\")\n", 766 | "\n", 767 | "GEOBypass = widgets.Dropdown(options=[\"Disable\", \"Hide\", \"AD\", \"AE\", \"AF\", \"AG\", \"AI\", \"AL\", \"AM\", \"AO\", \"AQ\", \"AR\", \"AS\", \"AT\", \"AU\", \"AW\", \"AX\", \"AZ\", \"BA\", \"BB\", \"BD\", \"BE\", \"BF\", \"BG\", \"BH\", \"BI\", \"BJ\", \"BL\", \"BM\", \"BN\", \"BO\", \"BQ\", \"BR\", \"BS\", \"BT\", \"BV\", \"BW\", \"BY\", \"BZ\", \"CA\", \"CC\", \"CD\", \"CF\", \"CG\", \"CH\", \"CI\", \"CK\", \"CL\", \"CM\", \"CN\", \"CO\", \"CR\", \"CU\", \"CV\", \"CW\", \"CX\", \"CY\", \"CZ\", \"DE\", \"DJ\", \"DK\", \"DM\", \"DO\", \"DZ\", \"EC\", \"EE\", \"EG\", \"EH\", \"ER\", \"ES\", \"ET\", \"FI\", \"FJ\", \"FK\", \"FM\", \"FO\", \"FR\", \"GA\", \"GB\", \"GD\", \"GE\", \"GF\", \"GG\", \"GH\", \"GI\", \"GL\", \"GM\", \"GN\", \"GP\", \"GQ\", \"GR\", \"GS\", \"GT\", \"GU\", \"GW\", \"GY\", \"HK\", \"HM\", \"HN\", \"HR\", \"HT\", \"HU\", \"ID\", \"IE\", \"IL\", \"IM\", \"IN\", \"IO\", \"IQ\", \"IR\", \"IS\", \"IT\", \"JE\", \"JM\", \"JO\", \"JP\", \"KE\", \"KG\", \"KH\", \"KI\", \"KM\", \"KN\", \"KP\", \"KR\", \"KW\", \"KY\", \"KZ\", \"LA\", \"LB\", \"LC\", \"LI\", \"LK\", \"LR\", \"LS\", \"LT\", \"LU\", \"LV\", \"LY\", \"MA\", \"MC\", \"MD\", \"ME\", \"MF\", \"MG\", \"MH\", \"MK\", \"ML\", \"MM\", \"MN\", \"MO\", \"MP\", \"MQ\", \"MR\", \"MS\", \"MT\", \"MU\", \"MV\", \"MW\", \"MX\", \"MY\", \"MZ\", \"NA\", \"NC\", \"NE\", \"NF\", \"NG\", \"NI\", \"NL\", \"NO\", \"NP\", \"NR\", \"NU\", \"NZ\", \"OM\", \"PA\", \"PE\", \"PF\", \"PG\", \"PH\", \"PK\", \"PL\", \"PM\", \"PN\", \"PR\", \"PS\", \"PT\", \"PW\", \"PY\", \"QA\", \"RE\", \"RO\", \"RS\", \"RU\", \"RW\", \"SA\", \"SB\", \"SC\", \"SD\", \"SE\", \"SG\", \"SH\", \"SI\", \"SJ\", \"SK\", \"SL\", \"SM\", \"SN\", \"SO\", \"SR\", \"SS\", \"ST\", \"SV\", \"SX\", \"SY\", \"SZ\", \"TC\", \"TD\", \"TF\", \"TG\", \"TH\", \"TJ\", \"TK\", \"TL\", \"TM\", \"TN\", \"TO\", \"TR\", \"TT\", \"TV\", \"TW\", \"TZ\", \"UA\", \"UG\", \"UM\", \"US\", \"UY\", \"UZ\", \"VA\", \"VC\", \"VE\", \"VG\", \"VI\", \"VN\", \"VU\", \"WF\", \"WS\", \"YE\", \"YT\", \"ZA\", \"ZM\", \"ZW\"])\n", 768 | "\n", 769 | "ProxyYT = widgets.Text(placeholder=\"Proxy URL\")\n", 770 | "\n", 771 | "MinSleep = widgets.BoundedIntText(value=0, min=0, max=300, step=1, description=\"Min:\")\n", 772 | "\n", 773 | "MaxSleep = widgets.BoundedIntText(value=0, min=0, max=300, step=1, description=\"Max:\")\n", 774 | "\n", 775 | "ExtraArg = widgets.Text(placeholder=\"Extra Arguments\")\n", 776 | "\n", 777 | "class MakeButton(object):\n", 778 | " def __init__(self, title, callback, style):\n", 779 | " self._title = title\n", 780 | " self._callback = callback\n", 781 | " self._style = style\n", 782 | " def _repr_html_(self):\n", 783 | " callback_id = 'button-' + str(uuid.uuid4())\n", 784 | " output.register_callback(callback_id, self._callback)\n", 785 | " if self._style != \"\":\n", 786 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button mod-\" + self._style\n", 787 | " else:\n", 788 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button\"\n", 789 | " template = \"\"\"\n", 790 | " \"\"\"\n", 796 | " html = template.format(title=self._title, callback_id=callback_id, style_html=style_html)\n", 797 | " return html\n", 798 | " \n", 799 | "def MakeLabel(description, button_style):\n", 800 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 801 | "\n", 802 | "def upload_archive():\n", 803 | " if ask_yes_no(\"Do you already have an archive file? (y/n)\", default=\"\", interrupt=\"\"):\n", 804 | " try:\n", 805 | " display(HTML(\"

Please upload an archive from your computer.


\"))\n", 806 | " UploadConfig = files.upload().keys()\n", 807 | " clear_output(wait=True)\n", 808 | " if len(UploadConfig) == 0:\n", 809 | " return display(HTML(\"

File upload has been cancelled during upload file.


\"))\n", 810 | " elif len(UploadConfig) == 1:\n", 811 | " for fn in UploadConfig:\n", 812 | " if os.path.isfile(\"/content/\" + fn):\n", 813 | " get_ipython().system_raw(\"mv -f \" + \"\\\"\" + fn + \"\\\" /root/.youtube-dl.txt && chmod 666 /root/.youtube-dl.txt\")\n", 814 | " AudioOnly.observe(AudioOnlyChange)\n", 815 | " Subtitle.observe(SubtitleChange)\n", 816 | " AudioQ.observe(AudioQChange)\n", 817 | " ShowYT()\n", 818 | " else:\n", 819 | " return display(HTML(\"

File upload has been failed during upload file.


\"))\n", 820 | " else:\n", 821 | " for fn in UploadConfig:\n", 822 | " get_ipython().system_raw(\"rm -f \" + \"\\\"\" + fn + \"\\\"\")\n", 823 | " return display(HTML(\"

Please uploading only one file at a time.


\"))\n", 824 | " except:\n", 825 | " clear_output(wait=True)\n", 826 | " return display(HTML(\"

Error occurred during upload file.


\"))\n", 827 | " else:\n", 828 | " get_ipython().system_raw(\"touch '/root/.youtube-dl.txt'\")\n", 829 | " AudioOnly.observe(AudioOnlyChange)\n", 830 | " Subtitle.observe(SubtitleChange)\n", 831 | " AudioQ.observe(AudioQChange)\n", 832 | " ShowYT()\n", 833 | "\n", 834 | "def RefreshPathYT():\n", 835 | " if os.path.exists(\"/content/drive/\"):\n", 836 | " if os.path.exists(\"/content/drive/Shared drives/\"):\n", 837 | " SavePathYT.options = [\"/content\", \"/content/Downloads\", \"/content/drive/My Drive\"] + glob(\"/content/drive/My Drive/*/\") + glob(\"/content/drive/Shared drives/*/\")\n", 838 | " else:\n", 839 | " SavePathYT.options = [\"/content\", \"/content/Downloads\", \"/content/drive/My Drive\"] + glob(\"/content/drive/My Drive/*/\")\n", 840 | " else:\n", 841 | " SavePathYT.options = [\"/content\", \"/content/Downloads\"]\n", 842 | "\n", 843 | "def AudioOnlyChange(change):\n", 844 | " if change[\"type\"] == \"change\" and change[\"new\"]:\n", 845 | " VideoQ.disabled = True\n", 846 | " Subtitle.disabled = True\n", 847 | " if Subtitle.value:\n", 848 | " Subtitle.button_style = \"info\"\n", 849 | " else:\n", 850 | " Subtitle.button_style = \"\"\n", 851 | " Resolution.disabled = True\n", 852 | " Extension.options = [\"best\", \"aac\", \"flac\", \"mp3\", \"m4a\", \"opus\", \"vorbis\", \"wav\"]\n", 853 | " Extension.value = \"best\"\n", 854 | " AudioOnly.button_style = \"info\"\n", 855 | " elif change[\"type\"] == \"change\" and change[\"new\"] == False:\n", 856 | " VideoQ.disabled = False\n", 857 | " Subtitle.disabled = False\n", 858 | " if Subtitle.value:\n", 859 | " Subtitle.button_style = \"info\"\n", 860 | " else:\n", 861 | " Subtitle.button_style = \"\"\n", 862 | " Resolution.disabled = False\n", 863 | " if AudioQ.value == \"Best Quality (Opus)\":\n", 864 | " Extension.options = [\"mkv\", \"webm\"]\n", 865 | " else:\n", 866 | " Extension.options = [\"mkv\", \"mp4\", \"webm\"]\n", 867 | " Extension.value = \"mkv\"\n", 868 | " AudioOnly.button_style = \"\"\n", 869 | "\n", 870 | "def SubtitleChange(change):\n", 871 | " if change[\"type\"] == \"change\" and change[\"new\"]:\n", 872 | " Subtitle.button_style = \"info\"\n", 873 | " elif change[\"type\"] == \"change\" and change[\"new\"] == False:\n", 874 | " Subtitle.button_style = \"\"\n", 875 | "\n", 876 | "def AudioQChange(change):\n", 877 | " if change[\"type\"] == \"change\" and change[\"new\"] == \"Best Quality (Opus)\":\n", 878 | " Extension.options = [\"mkv\", \"webm\"]\n", 879 | " Extension.value = \"mkv\"\n", 880 | " elif change[\"type\"] == \"change\" and change[\"new\"] == \"Best Compatibility (M4A)\":\n", 881 | " Extension.options = [\"mkv\", \"mp4\", \"webm\"]\n", 882 | " Extension.value = \"mkv\"\n", 883 | "\n", 884 | "def ShowYT():\n", 885 | " clear_output(wait=True)\n", 886 | " RefreshPathYT()\n", 887 | " display(widgets.HBox([widgets.VBox([widgets.HTML(\"Link:\"), Links,\n", 888 | " widgets.HTML(\"For website that require an account:\"), UsernameYT, PasswordYT, SecAuth, VideoPW,\n", 889 | " widgets.HTML(\"GEO Bypass Country:\"), GEOBypass,\n", 890 | " widgets.HTML(\"Proxy:\"), ProxyYT,\n", 891 | " widgets.HTML(\"Sleep Interval (second):\"), MinSleep, MaxSleep]),\n", 892 | " widgets.VBox([widgets.HTML(\"Video Quality:\"), VideoQ, widgets.HTML(\"Resolution:\"), Resolution,\n", 893 | " widgets.HTML(\"Audio Quality:\"), AudioQ, widgets.HTML(\"Extension:\"), Extension,\n", 894 | " widgets.HTML(\"Extra Options:\"), widgets.HBox([Subtitle, AudioOnly]),\n", 895 | " widgets.HTML(\"Extra Arguments:\"), ExtraArg])]), HTML(\"

Save Location:

\"),\n", 896 | " SavePathYT, MakeButton(\"Refresh\", RefreshPathYT, \"\"))\n", 897 | " if not os.path.exists(\"/content/drive/\"):\n", 898 | " display(HTML(\"*If you want to save in Google Drive please run the cell below.\"))\n", 899 | " display(HTML(\"
\"), MakeButton(\"Download\", DownloadYT, \"info\"))\n", 900 | "\n", 901 | "def DownloadYT():\n", 902 | " if Links.value.strip():\n", 903 | " Count = 0\n", 904 | " Total = str(len(Links.value.splitlines()))\n", 905 | " # Account Check\n", 906 | " if UsernameYT.value.strip() and PasswordYT.value.strip():\n", 907 | " accountC = \"--username \\\"\" + UsernameYT.value + \"\\\" --password \\\"\" + PasswordYT.value + \"\\\"\"\n", 908 | " else:\n", 909 | " accountC = \"\"\n", 910 | " if SecAuth.value.strip():\n", 911 | " secauthC = \"-2 \" + SecAuth.value\n", 912 | " else:\n", 913 | " secauthC = \"\"\n", 914 | " if VideoPW.value.strip():\n", 915 | " videopwC = \"--video-password \" + VideoPW.value\n", 916 | " else:\n", 917 | " videopwC = \"\"\n", 918 | " # Proxy\n", 919 | " if ProxyYT.value.strip():\n", 920 | " proxyytC = \"--proxy \" + ProxyYT.value\n", 921 | " else:\n", 922 | " proxyytC = \"\"\n", 923 | " # GEO Bypass\n", 924 | " if GEOBypass.value == \"Disable\":\n", 925 | " geobypass = \"\"\n", 926 | " elif GEOBypass.value == \"Hide\":\n", 927 | " geobypass = \"--geo-bypass\"\n", 928 | " else:\n", 929 | " geobypass = \"--geo-bypass-country \" + GEOBypass.value\n", 930 | " # Video Quality\n", 931 | " if VideoQ.value == \"Best Quality (VP9 upto 4K)\":\n", 932 | " videoqC = \"webm\"\n", 933 | " else:\n", 934 | " videoqC = \"mp4\"\n", 935 | " # Audio Quality\n", 936 | " if AudioQ.value == \"Best Quality (Opus)\":\n", 937 | " audioqC = \"webm\"\n", 938 | " else:\n", 939 | " audioqC = \"m4a\"\n", 940 | " # Audio Only Check\n", 941 | " if AudioOnly.value:\n", 942 | " subtitleC = \"\"\n", 943 | " thumbnailC = \"\"\n", 944 | " extC = \"-x --audio-quality 0 --audio-format \" + Extension.value\n", 945 | " codecC = \"bestaudio[ext=\" + audioqC + \"]/bestaudio/best\"\n", 946 | " else:\n", 947 | " if Subtitle.value:\n", 948 | " subtitleC = \"--all-subs --convert-subs srt --embed-subs\"\n", 949 | " else:\n", 950 | " subtitleC = \"\"\n", 951 | " if Extension.value == \"mp4\":\n", 952 | " thumbnailC = \"--embed-thumbnail\"\n", 953 | " else:\n", 954 | " thumbnailC = \"\"\n", 955 | " extC = \"--merge-output-format \" + Extension.value\n", 956 | " if Resolution.value == \"Highest\":\n", 957 | " codecC = \"bestvideo[ext=\" + videoqC + \"]+bestaudio[ext=\" + audioqC + \"]/bestvideo+bestaudio/best\"\n", 958 | " else:\n", 959 | " codecC = \"bestvideo[ext=\" + videoqC + \",height<=\" + Resolution.value.replace(\"4K\", \"2160\").replace(\"p\", \"\") + \"]+bestaudio[ext=\" + audioqC + \"]/bestvideo[height<=\" + Resolution.value.replace(\"4K\", \"2160\").replace(\"p\", \"\") + \"]+bestaudio/bestvideo+bestaudio/best\"\n", 960 | " # Archive\n", 961 | " if os.path.isfile(\"/root/.youtube-dl.txt\"):\n", 962 | " archiveC = \"--download-archive \\\"/root/.youtube-dl.txt\\\"\"\n", 963 | " else:\n", 964 | " archiveC = \"\"\n", 965 | " # Sleep Interval\n", 966 | " if MinSleep.value > 0 and MaxSleep.value > 0:\n", 967 | " minsleepC = \"--min-sleep-interval \" + MinSleep.value\n", 968 | " maxsleepC = \"--max-sleep-interval \" + MaxSleep.value\n", 969 | " else:\n", 970 | " minsleepC = \"\"\n", 971 | " maxsleepC = \"\"\n", 972 | " # Extra Arguments\n", 973 | " extraargC = ExtraArg.value\n", 974 | " for Link in Links.value.splitlines():\n", 975 | " clear_output(wait=True)\n", 976 | " Count += 1\n", 977 | " display(HTML(\"

Processing link \" + str(Count) + \" out of \" + Total + \"

\"))\n", 978 | " if \"youtube.com\" in Link or \"youtu.be\" in Link:\n", 979 | " display(HTML(\"

Currently downloading...


\"), YouTubeVideo(Link, width=640, height=360), HTML(\"
\"))\n", 980 | " else:\n", 981 | " display(HTML(\"

Currently downloading \" + Link + \"


\"))\n", 982 | " if (\"youtube.com\" in Link or \"youtu.be\" in Link) and \"list=\" in Link:\n", 983 | " !youtube-dl -i --no-warnings --yes-playlist --add-metadata $accountC $secauthC $videopwC $minsleepC $maxsleepC $geobypass $proxyytC $extC $thumbnailC $subtitleC $archiveC $extraargC -f \"$codecC\" -o \"/root/.YouTube-DL/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s\" \"$Link\"\n", 984 | " else:\n", 985 | " !youtube-dl -i --no-warnings --yes-playlist --add-metadata $accountC $secauthC $videopwC $minsleepC $maxsleepC $geobypass $proxyytC $extC $thumbnailC $subtitleC $archiveC $extraargC -f \"$codecC\" -o \"/root/.YouTube-DL/%(title)s.%(ext)s\" \"$Link\"\n", 986 | " if not os.path.exists(SavePathYT.value):\n", 987 | " get_ipython().system_raw(\"mkdir -p -m 666 \" + SavePathYT.value)\n", 988 | " get_ipython().system_raw(\"mv /root/.YouTube-DL/* '\" + SavePathYT.value + \"/'\")\n", 989 | " # Archive Download\n", 990 | " if os.path.isfile(\"/root/.youtube-dl.txt\"):\n", 991 | " files.download(\"/root/.youtube-dl.txt\")\n", 992 | " ShowYT()\n", 993 | "\n", 994 | "if not os.path.isfile(\"/usr/local/bin/youtube-dl\"):\n", 995 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && mkdir -p -m 666 /root/.YouTube-DL/ && apt-get install atomicparsley && curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl && chmod a+rx /usr/local/bin/youtube-dl\")\n", 996 | "if Archive:\n", 997 | " upload_archive()\n", 998 | "else:\n", 999 | " AudioOnly.observe(AudioOnlyChange)\n", 1000 | " Subtitle.observe(SubtitleChange)\n", 1001 | " AudioQ.observe(AudioQChange)\n", 1002 | " ShowYT()" 1003 | ], 1004 | "execution_count": 0, 1005 | "outputs": [] 1006 | }, 1007 | { 1008 | "cell_type": "code", 1009 | "metadata": { 1010 | "cellView": "form", 1011 | "colab_type": "code", 1012 | "id": "KW6-8sChA-Oj", 1013 | "colab": {} 1014 | }, 1015 | "source": [ 1016 | "#@markdown

⬅️ Click Here to Mount Google Drive

\n", 1017 | "#@markdown

⚠️ If you download the file directly to Google Drive, it might have data corruption, use this at your own risk!

\n", 1018 | "#@markdown

✅ The rclone method is recommended and always the safest.

\n", 1019 | "\n", 1020 | "import os, uuid; import ipywidgets as widgets\n", 1021 | "from IPython.display import clear_output\n", 1022 | "from google.colab import drive, output\n", 1023 | "\n", 1024 | "class MakeButton(object):\n", 1025 | " def __init__(self, title, callback, style):\n", 1026 | " self._title = title\n", 1027 | " self._callback = callback\n", 1028 | " self._style = style\n", 1029 | " def _repr_html_(self):\n", 1030 | " callback_id = 'button-' + str(uuid.uuid4())\n", 1031 | " output.register_callback(callback_id, self._callback)\n", 1032 | " if self._style != \"\":\n", 1033 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button mod-\" + self._style\n", 1034 | " else:\n", 1035 | " style_html = \"p-Widget jupyter-widgets jupyter-button widget-button\"\n", 1036 | " template = \"\"\"\n", 1037 | " \"\"\"\n", 1043 | " html = template.format(title=self._title, callback_id=callback_id, style_html=style_html)\n", 1044 | " return html\n", 1045 | " \n", 1046 | "def MakeLabel(description, button_style):\n", 1047 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 1048 | " \n", 1049 | "def DemountForm():\n", 1050 | " clear_output(wait=True)\n", 1051 | " display(MakeLabel(\"Demount Confirm?\", \"\"), MakeButton(\"Confirm\", Demount, \"danger\"), MakeButton(\"Cancel\", ShowGD, \"warning\"))\n", 1052 | " \n", 1053 | "def Demount():\n", 1054 | " clear_output(wait=True)\n", 1055 | " get_ipython().system_raw(\"pkill -9 -e -f drive\")\n", 1056 | " !rm -rf /root/.config/Google/DriveFS/\n", 1057 | " !echo \"If you want to mount Google Drive run this cell again.\"\n", 1058 | " \n", 1059 | "def ShowGD():\n", 1060 | " try:\n", 1061 | " RefreshPathYT()\n", 1062 | " except:\n", 1063 | " clear_output(wait=True)\n", 1064 | " display(MakeLabel(\"Control Panel\", \"\"), MakeButton(\"Demount\", DemountForm, \"danger\"))\n", 1065 | "\n", 1066 | "while not os.path.exists(\"/content/drive\"):\n", 1067 | " try:\n", 1068 | " drive.mount(\"/content/drive\")\n", 1069 | " clear_output(wait=True)\n", 1070 | " except:\n", 1071 | " clear_output(wait=True)\n", 1072 | " \n", 1073 | "ShowGD()" 1074 | ], 1075 | "execution_count": 0, 1076 | "outputs": [] 1077 | }, 1078 | { 1079 | "cell_type": "markdown", 1080 | "metadata": { 1081 | "colab_type": "text", 1082 | "id": "5-5ksQslqmYy" 1083 | }, 1084 | "source": [ 1085 | "# \"Utility\"/" 1086 | ] 1087 | }, 1088 | { 1089 | "cell_type": "code", 1090 | "metadata": { 1091 | "cellView": "form", 1092 | "colab_type": "code", 1093 | "id": "7HYXgcVh6S1-", 1094 | "colab": {} 1095 | }, 1096 | "source": [ 1097 | "#@markdown

⬅️ Install File Browser (file manager)

\n", 1098 | "#@markdown
\"netdata\"/
\n", 1099 | "#thanks K-E-N-W-A-Y for this script (https://github.com/K-E-N-W-A-Y/VNC-Script-for-Colab)\n", 1100 | "import os, psutil, IPython, uuid, time\n", 1101 | "import ipywidgets as widgets\n", 1102 | "\n", 1103 | "from IPython.display import HTML, clear_output\n", 1104 | "from google.colab import output\n", 1105 | "\n", 1106 | "class MakeButton(object):\n", 1107 | " def __init__(self, title, callback):\n", 1108 | " self._title = title\n", 1109 | " self._callback = callback\n", 1110 | " def _repr_html_(self):\n", 1111 | " callback_id = 'button-' + str(uuid.uuid4())\n", 1112 | " output.register_callback(callback_id, self._callback)\n", 1113 | " template = \"\"\"\n", 1114 | " \"\"\"\n", 1120 | " html = template.format(title=self._title, callback_id=callback_id)\n", 1121 | " return html\n", 1122 | " \n", 1123 | "def MakeLabel(description, button_style):\n", 1124 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 1125 | "\n", 1126 | "def RandomGenerator():\n", 1127 | " return time.strftime(\"%S\") + str(time.time()).split(\".\")[-1]\n", 1128 | "\n", 1129 | "def CheckProcess(process, command):\n", 1130 | " for pid in psutil.pids():\n", 1131 | " try:\n", 1132 | " p = psutil.Process(pid)\n", 1133 | " if process in p.name():\n", 1134 | " for arg in p.cmdline():\n", 1135 | " if command in str(arg): \n", 1136 | " return True\n", 1137 | " else:\n", 1138 | " pass\n", 1139 | " else:\n", 1140 | " pass\n", 1141 | " except:\n", 1142 | " continue\n", 1143 | " \n", 1144 | "def AutoSSH(name,port):\n", 1145 | " get_ipython().system_raw(\"autossh -l \" + name + \" -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:\" + port + \" ssh.localhost.run &\")\n", 1146 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + name + \":80:localhost:\" + port + \" serveo.net &\")\n", 1147 | "\n", 1148 | "def Start_ServerFM():\n", 1149 | " if CheckProcess(\"autossh\", \"fm\" + Random_Number_FM) != True:\n", 1150 | " AutoSSH(\"fm\" + Random_Number_FM, \"6969\")\n", 1151 | " if CheckProcess(\"filebrowser\", \"\") != True:\n", 1152 | " get_ipython().system_raw(\"filebrowser --noauth -p 6969 -r / &\")\n", 1153 | "\n", 1154 | "try:\n", 1155 | " try:\n", 1156 | " Random_Number_FM\n", 1157 | " except NameError:\n", 1158 | " Random_Number_FM = RandomGenerator()\n", 1159 | " display(MakeLabel('Installing in Progress', 'warning'))\n", 1160 | " if os.path.isfile(\"/tools/node/bin/cloudcmd\") == False:\n", 1161 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && curl -fsSL https://filebrowser.xyz/get.sh | bash\")\n", 1162 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 1163 | " get_ipython().system_raw(\"apt update -qq -y && apt install autossh -qq -y\")\n", 1164 | " Start_ServerFM()\n", 1165 | " clear_output(wait=True)\n", 1166 | " display(MakeLabel(\"✔ Successfully\", \"success\"), MakeButton(\"Recheck\", Start_ServerFM), HTML(\"

File Manager

\" \\\n", 1167 | " \"Website
\" \\\n", 1168 | " \"Website (Backup)

\"))\n", 1169 | "except:\n", 1170 | " clear_output(wait=True)\n", 1171 | " display(MakeLabel(\"✘ Unsuccessfully\", \"danger\"))" 1172 | ], 1173 | "execution_count": 0, 1174 | "outputs": [] 1175 | }, 1176 | { 1177 | "cell_type": "code", 1178 | "metadata": { 1179 | "cellView": "form", 1180 | "colab_type": "code", 1181 | "id": "cz4yU58HwTgb", 1182 | "colab": {} 1183 | }, 1184 | "source": [ 1185 | "#@markdown

⬅️ NOT WORKING - Install Cloud Commander (file manager)

\n", 1186 | "#@markdown
\"netdata\"/
\n", 1187 | "\n", 1188 | "import os, psutil, IPython, uuid, time\n", 1189 | "import ipywidgets as widgets\n", 1190 | "\n", 1191 | "from IPython.display import HTML, clear_output\n", 1192 | "from google.colab import output\n", 1193 | "\n", 1194 | "class MakeButton(object):\n", 1195 | " def __init__(self, title, callback):\n", 1196 | " self._title = title\n", 1197 | " self._callback = callback\n", 1198 | " def _repr_html_(self):\n", 1199 | " callback_id = 'button-' + str(uuid.uuid4())\n", 1200 | " output.register_callback(callback_id, self._callback)\n", 1201 | " template = \"\"\"\n", 1202 | " \"\"\"\n", 1208 | " html = template.format(title=self._title, callback_id=callback_id)\n", 1209 | " return html\n", 1210 | " \n", 1211 | "def MakeLabel(description, button_style):\n", 1212 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 1213 | "\n", 1214 | "def RandomGenerator():\n", 1215 | " return time.strftime(\"%S\") + str(time.time()).split(\".\")[-1]\n", 1216 | "\n", 1217 | "def CheckProcess(process, command):\n", 1218 | " for pid in psutil.pids():\n", 1219 | " try:\n", 1220 | " p = psutil.Process(pid)\n", 1221 | " if process in p.name():\n", 1222 | " for arg in p.cmdline():\n", 1223 | " if command in str(arg): \n", 1224 | " return True\n", 1225 | " else:\n", 1226 | " pass\n", 1227 | " else:\n", 1228 | " pass\n", 1229 | " except:\n", 1230 | " continue\n", 1231 | " \n", 1232 | "def AutoSSH(name,port):\n", 1233 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + name + \":80:localhost:\" + port + \" serveo.net &\")\n", 1234 | "\n", 1235 | "def Start_AutoSSH_CC():\n", 1236 | " if CheckProcess(\"cloudcmd\", \"\") != True:\n", 1237 | " get_ipython().system_raw(\"cloudcmd --online --no-auth --show-config --show-file-name --editor 'deepword' --packer 'tar' --port $Port_CC --progress --no-confirm-copy --confirm-move --name 'RcloneLab File Manager' --keys-panel --no-contact --console --sync-console-path --no-terminal --no-vim --columns 'name-size-date' --no-log &\")\n", 1238 | " if CheckProcess(\"autossh\", Random_URL_CC) != True:\n", 1239 | " AutoSSH(Random_URL_CC, Port_CC)\n", 1240 | "\n", 1241 | "def Start_Localhost_CC():\n", 1242 | " try:\n", 1243 | " clear_output(wait=True)\n", 1244 | " !autossh -l $Random_URL_CC -M 0 -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:$Port_CC ssh.localhost.run\n", 1245 | " except:\n", 1246 | " Control_Panel_CC()\n", 1247 | " Control_Panel_CC()\n", 1248 | "\n", 1249 | "def Control_Panel_CC():\n", 1250 | " clear_output(wait=True)\n", 1251 | " display(MakeLabel(\"✔ Successfully\", \"success\"), MakeButton(\"Recheck\", Start_AutoSSH_CC), MakeButton(\"Backup Website\", Start_Localhost_CC), HTML(\"

File Manager

\" \\\n", 1252 | " \"Website

\"))\n", 1253 | "\n", 1254 | "try:\n", 1255 | " try:\n", 1256 | " Random_URL_CC\n", 1257 | " except NameError:\n", 1258 | " Random_URL_CC = \"cc\" + RandomGenerator()\n", 1259 | " Port_CC = \"7007\"\n", 1260 | " display(MakeLabel('Installing in Progress', 'warning'))\n", 1261 | " if os.path.isfile(\"/tools/node/bin/cloudcmd\") == False:\n", 1262 | " get_ipython().system_raw(\"rm -rf /content/sample_data/ && npm i -g npm && npm i cloudcmd -g\")\n", 1263 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 1264 | " get_ipython().system_raw(\"apt update -qq -y && apt install autossh -qq -y\")\n", 1265 | " Start_AutoSSH_CC()\n", 1266 | " Control_Panel_CC()\n", 1267 | "except:\n", 1268 | " clear_output(wait=True)\n", 1269 | " display(MakeLabel(\"✘ Unsuccessfully\", \"danger\"))" 1270 | ], 1271 | "execution_count": 0, 1272 | "outputs": [] 1273 | }, 1274 | { 1275 | "cell_type": "code", 1276 | "metadata": { 1277 | "cellView": "form", 1278 | "colab_type": "code", 1279 | "id": "okRRPq_htqmR", 1280 | "colab": {} 1281 | }, 1282 | "source": [ 1283 | "# ============================= FORM ============================= #\n", 1284 | "#@markdown

⬅️ Install netdata (Real-time Server Monitoring)

\n", 1285 | "#@markdown
\"netdata\"/
\n", 1286 | "# ================================================================ #\n", 1287 | "\n", 1288 | "import os, psutil, IPython, uuid, time\n", 1289 | "import ipywidgets as widgets\n", 1290 | "\n", 1291 | "from IPython.display import HTML, clear_output\n", 1292 | "from google.colab import output\n", 1293 | "\n", 1294 | "class MakeButton(object):\n", 1295 | " def __init__(self, title, callback):\n", 1296 | " self._title = title\n", 1297 | " self._callback = callback\n", 1298 | " def _repr_html_(self):\n", 1299 | " callback_id = 'button-' + str(uuid.uuid4())\n", 1300 | " output.register_callback(callback_id, self._callback)\n", 1301 | " template = \"\"\"\n", 1302 | " \"\"\"\n", 1308 | " html = template.format(title=self._title, callback_id=callback_id)\n", 1309 | " return html\n", 1310 | "\n", 1311 | "def MakeLabel(description, button_style):\n", 1312 | " return widgets.Button(description=description, disabled=True, button_style=button_style)\n", 1313 | "\n", 1314 | "def RandomGenerator():\n", 1315 | " return time.strftime(\"%S\") + str(time.time()).split(\".\")[-1]\n", 1316 | "\n", 1317 | "def CheckProcess(process, command):\n", 1318 | " for pid in psutil.pids():\n", 1319 | " try:\n", 1320 | " p = psutil.Process(pid)\n", 1321 | " if process in p.name():\n", 1322 | " for arg in p.cmdline():\n", 1323 | " if command in str(arg): \n", 1324 | " return True\n", 1325 | " else:\n", 1326 | " pass\n", 1327 | " else:\n", 1328 | " pass\n", 1329 | " except:\n", 1330 | " continue\n", 1331 | "\n", 1332 | "def AutoSSH(name,port):\n", 1333 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + name + \":80:localhost:\" + port + \" serveo.net &\")\n", 1334 | "\n", 1335 | "def Start_AutoSSH_ND():\n", 1336 | " if CheckProcess(\"netdata\", \"\") != True:\n", 1337 | " get_ipython().system_raw(\"/usr/sbin/netdata\")\n", 1338 | " if CheckProcess(\"autossh\", Random_URL_ND) != True:\n", 1339 | " AutoSSH(Random_URL_ND, Port_ND)\n", 1340 | "\n", 1341 | "def Start_Localhost_ND():\n", 1342 | " try:\n", 1343 | " clear_output(wait=True)\n", 1344 | " !autossh -l $Random_URL_ND -M 0 -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:$Port_ND ssh.localhost.run\n", 1345 | " except:\n", 1346 | " Control_Panel_CC()\n", 1347 | " Control_Panel_CC()\n", 1348 | "\n", 1349 | "def Control_Panel_ND():\n", 1350 | " clear_output(wait=True)\n", 1351 | " display(MakeLabel(\"✔ Successfully\", \"success\"), MakeButton(\"Recheck\", Start_AutoSSH_ND), MakeButton(\"Backup Website\", Start_Localhost_ND), HTML(\"

\" \\\n", 1352 | " \"Website

\"))\n", 1353 | "\n", 1354 | "try:\n", 1355 | " try:\n", 1356 | " Random_URL_ND\n", 1357 | " except NameError:\n", 1358 | " Random_URL_ND = \"nd\" + RandomGenerator()\n", 1359 | " Port_ND = \"19999\"\n", 1360 | " display(MakeLabel(\"Installing in Progress\", \"warning\"))\n", 1361 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 1362 | " get_ipython().system_raw(\"apt update -qq -y && apt install autossh -qq -y\")\n", 1363 | " if os.path.isfile(\"/usr/sbin/netdata\") == False:\n", 1364 | " get_ipython().system_raw(\"apt --fix-broken install\")\n", 1365 | " get_ipython().system_raw(\"bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait --dont-start-it\")\n", 1366 | " Start_AutoSSH_ND()\n", 1367 | " Control_Panel_ND()\n", 1368 | "except:\n", 1369 | " clear_output(wait=True)\n", 1370 | " display(MakeLabel(\"✘ Unsuccessfully\", \"danger\"))" 1371 | ], 1372 | "execution_count": 0, 1373 | "outputs": [] 1374 | }, 1375 | { 1376 | "cell_type": "code", 1377 | "metadata": { 1378 | "cellView": "form", 1379 | "colab_type": "code", 1380 | "id": "O-jIeNjdbkOQ", 1381 | "colab": {} 1382 | }, 1383 | "source": [ 1384 | "# ============================= FORM ============================= #\n", 1385 | "#@markdown

⬅️ Check VM's Status

\n", 1386 | "Check_IP = True #@param {type:\"boolean\"}\n", 1387 | "Loop_Check = False #@param {type:\"boolean\"}\n", 1388 | "Loop_Interval = 5 #@param {type:\"slider\", min:1, max:15, step:1}\n", 1389 | "# ================================================================ #\n", 1390 | "\n", 1391 | "import time, requests\n", 1392 | "from IPython.display import clear_output\n", 1393 | "Loop = True\n", 1394 | "\n", 1395 | "try:\n", 1396 | " while Loop == True:\n", 1397 | " clear_output(wait=True)\n", 1398 | " !top -bcn1 -w512\n", 1399 | " if Check_IP: print(\"\\nYour Public IP: \" + requests.get('http://ip.42.pl/raw').text)\n", 1400 | " if Loop_Check == False:\n", 1401 | " Loop = False\n", 1402 | " else:\n", 1403 | " time.sleep(Loop_Interval)\n", 1404 | "except:\n", 1405 | " clear_output()" 1406 | ], 1407 | "execution_count": 0, 1408 | "outputs": [] 1409 | }, 1410 | { 1411 | "cell_type": "code", 1412 | "metadata": { 1413 | "cellView": "form", 1414 | "colab_type": "code", 1415 | "id": "M4tD3PEMEOH9", 1416 | "colab": {} 1417 | }, 1418 | "source": [ 1419 | "# ============================= FORM ============================= #\n", 1420 | "#@markdown

⬅️ Get VM's Specification

\n", 1421 | "Output_Format = \"TEXT\" #@param [\"TEXT\", \"HTML\", \"XML\", \"JSON\"]\n", 1422 | "Short_Output = True #@param {type:\"boolean\"}\n", 1423 | "# ================================================================ #\n", 1424 | "\n", 1425 | "import os\n", 1426 | "from google.colab import files\n", 1427 | "from IPython.display import HTML, clear_output\n", 1428 | "\n", 1429 | "try:\n", 1430 | " Output_Format_Ext\n", 1431 | "except NameError:\n", 1432 | " get_ipython().system_raw(\"apt install lshw -qq -y\")\n", 1433 | "\n", 1434 | "if Short_Output:\n", 1435 | " Output_Format = \"txt\"\n", 1436 | " Output_Format2 = \"-short\"\n", 1437 | " Output_Format_Ext = \"txt\"\n", 1438 | "elif Output_Format == \"TEXT\":\n", 1439 | " Output_Format = \"txt\"\n", 1440 | " Output_Format2 = \"\"\n", 1441 | " Output_Format_Ext = \"txt\"\n", 1442 | "else:\n", 1443 | " Output_Format = Output_Format.lower()\n", 1444 | " Output_Format2 = \"-\"+Output_Format.lower()\n", 1445 | " Output_Format_Ext = Output_Format.lower()\n", 1446 | "\n", 1447 | "get_ipython().system_raw(\"lshw \" + Output_Format2 + \" > Specification.\" + Output_Format)\n", 1448 | "files.download(\"/content/Specification.\" + Output_Format_Ext)\n", 1449 | "get_ipython().system_raw(\"rm -f /content/Specification.$outputformatC\")\n", 1450 | "display(HTML(\"

Sending log to your browser...


\"))" 1451 | ], 1452 | "execution_count": 0, 1453 | "outputs": [] 1454 | } 1455 | ] 1456 | } -------------------------------------------------------------------------------- /VM's specification/DATE 2019.10.14: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/VM's specification/DATE 2019.10.14 -------------------------------------------------------------------------------- /VM's specification/Specification (GPU-High-RAM).txt: -------------------------------------------------------------------------------- 1 | cdd8a6f515bc 2 | description: Computer 3 | width: 64 bits 4 | capabilities: smp vsyscall32 5 | *-core 6 | description: Motherboard 7 | physical id: 0 8 | *-memory 9 | description: System memory 10 | physical id: 0 11 | size: 12GiB 12 | *-cpu 13 | product: Intel(R) Xeon(R) CPU @ 2.30GHz 14 | vendor: Intel Corp. 15 | physical id: 1 16 | bus info: cpu@0 17 | width: 64 bits 18 | capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp x86-64 constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat md_clear arch_capabilities 19 | *-pci 20 | description: Host bridge 21 | product: 440FX - 82441FX PMC [Natoma] 22 | vendor: Intel Corporation 23 | physical id: 100 24 | bus info: pci@0000:00:00.0 25 | version: 02 26 | width: 32 bits 27 | clock: 33MHz 28 | *-isa 29 | description: ISA bridge 30 | product: 82371AB/EB/MB PIIX4 ISA 31 | vendor: Intel Corporation 32 | physical id: 1 33 | bus info: pci@0000:00:01.0 34 | version: 03 35 | width: 32 bits 36 | clock: 33MHz 37 | capabilities: isa 38 | configuration: latency=0 39 | *-bridge UNCLAIMED 40 | description: Bridge 41 | product: 82371AB/EB/MB PIIX4 ACPI 42 | vendor: Intel Corporation 43 | physical id: 1.3 44 | bus info: pci@0000:00:01.3 45 | version: 03 46 | width: 32 bits 47 | clock: 33MHz 48 | capabilities: bridge 49 | configuration: latency=0 50 | *-generic 51 | description: Non-VGA unclassified device 52 | product: Virtio SCSI 53 | vendor: Red Hat, Inc. 54 | physical id: 3 55 | bus info: pci@0000:00:03.0 56 | version: 00 57 | width: 32 bits 58 | clock: 33MHz 59 | capabilities: msix bus_master cap_list 60 | configuration: driver=virtio-pci latency=0 61 | resources: irq:11 ioport:c080(size=64) memory:fd000000-fd00007f 62 | *-virtio0 UNCLAIMED 63 | description: Virtual I/O device 64 | physical id: 0 65 | bus info: virtio@0 66 | configuration: driver=virtio_scsi 67 | *-display 68 | description: 3D controller 69 | product: GK210GL [Tesla K80] 70 | vendor: NVIDIA Corporation 71 | physical id: 4 72 | bus info: pci@0000:00:04.0 73 | version: a1 74 | width: 64 bits 75 | clock: 33MHz 76 | capabilities: msi pm bus_master cap_list 77 | configuration: driver=nvidia latency=0 78 | resources: iomemory:40-3f iomemory:80-7f irq:33 memory:fc000000-fcffffff memory:400000000-7ffffffff memory:800000000-801ffffff ioport:c000(size=128) 79 | *-network 80 | description: Ethernet controller 81 | product: Virtio network device 82 | vendor: Red Hat, Inc. 83 | physical id: 5 84 | bus info: pci@0000:00:05.0 85 | version: 00 86 | width: 32 bits 87 | clock: 33MHz 88 | capabilities: msix bus_master cap_list 89 | configuration: driver=virtio-pci latency=0 90 | resources: irq:10 ioport:c0c0(size=64) memory:fd001000-fd00107f 91 | *-virtio1 UNCLAIMED 92 | description: Virtual I/O device 93 | physical id: 0 94 | bus info: virtio@1 95 | configuration: driver=virtio_net 96 | *-network 97 | description: Ethernet interface 98 | physical id: 1 99 | logical name: eth0 100 | serial: 02:42:ac:1c:00:02 101 | size: 10Gbit/s 102 | capabilities: ethernet physical 103 | configuration: autonegotiation=off broadcast=yes driver=veth driverversion=1.0 duplex=full ip=172.28.0.2 link=yes multicast=yes port=twisted pair speed=10Gbit/s 104 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /docs/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/01.png -------------------------------------------------------------------------------- /docs/screenshot/ban.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/ban.gif -------------------------------------------------------------------------------- /docs/screenshot/cloud_commander.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/cloud_commander.png -------------------------------------------------------------------------------- /docs/screenshot/file_browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/file_browser.png -------------------------------------------------------------------------------- /docs/screenshot/jdownloader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/jdownloader.png -------------------------------------------------------------------------------- /docs/screenshot/netdata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/netdata.png -------------------------------------------------------------------------------- /docs/screenshot/netdata_upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/netdata_upload.png -------------------------------------------------------------------------------- /docs/screenshot/qbittorrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/qbittorrent.png -------------------------------------------------------------------------------- /docs/screenshot/rclonelab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/rclonelab.png -------------------------------------------------------------------------------- /docs/screenshot/youtube-dl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/docs/screenshot/youtube-dl.png -------------------------------------------------------------------------------- /img/title_cloud_commander.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_cloud_commander.png -------------------------------------------------------------------------------- /img/title_file_browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_file_browser.png -------------------------------------------------------------------------------- /img/title_jdownloader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_jdownloader.png -------------------------------------------------------------------------------- /img/title_netdata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_netdata.png -------------------------------------------------------------------------------- /img/title_qbittorrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_qbittorrent.png -------------------------------------------------------------------------------- /img/title_rclonelab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_rclonelab.png -------------------------------------------------------------------------------- /img/title_rtorrent_flood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_rtorrent_flood.png -------------------------------------------------------------------------------- /img/title_utility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_utility.png -------------------------------------------------------------------------------- /img/title_youtube-dl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/title_youtube-dl.png -------------------------------------------------------------------------------- /img/vector/font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/vector/font.ttf -------------------------------------------------------------------------------- /img/vector/netdata.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | Netdata logo 10 | 42 | 47 | 48 | -------------------------------------------------------------------------------- /img/vector/title.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/img/vector/title.eps -------------------------------------------------------------------------------- /res/jdownloader/sevenzipjbinding1509.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/jdownloader/sevenzipjbinding1509.jar -------------------------------------------------------------------------------- /res/jdownloader/sevenzipjbinding1509Linux.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/jdownloader/sevenzipjbinding1509Linux.jar -------------------------------------------------------------------------------- /res/qbittorrent/SearchPlugins.txt: -------------------------------------------------------------------------------- 1 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/btbit.py 2 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/btdb.py 3 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/eztv.py 4 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/jackett.py 5 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/leetx.py 6 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/legittorrents.py 7 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/limetorrents.py 8 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/piratebay.py 9 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/rarbg.py 10 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/torlock.py 11 | https://github.com/qbittorrent/search-plugins/blob/master/nova3/engines/zooqle.py 12 | https://raw.githubusercontent.com/hannsen/qbittorrent_search_plugins/master/ali213.py 13 | https://github.com/nindogo/qbtSearchScripts/raw/master/anidex.py 14 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/cinecalidad.py 15 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/cpasbien.py 16 | https://github.com/xyauhideto/DMHY_qBittorrent_search_plugin/raw/master/dmhyorg.py 17 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/ettv.py 18 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/extratorrent.py 19 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/foxcili.py 20 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/horriblesubs.py 21 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/corsaroblu.py 22 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/corsaronero.py 23 | https://github.com/dandag/qBittorrent_search_engine/blob/master/corsarored.py 24 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/kickass_torrent.py 25 | https://raw.githubusercontent.com/MadeOfMagicAndWires/qBit-plugins/6074a7cccb90dfd5c81b7eaddd3138adec7f3377/engines/linuxtracker.py 26 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/mejor.py 27 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/solotorrent.py 28 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/torrentfunk.py 29 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/torrentproject.py 30 | https://raw.githubusercontent.com/nindogo/qbtSearchScripts/master/uniondht.py 31 | https://raw.githubusercontent.com/MaurizioRicci/qBittorrent_search_engine/master/yts_am.py -------------------------------------------------------------------------------- /res/qbittorrent/archive/pool.txt: -------------------------------------------------------------------------------- 1 | http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/pool/main/q/qbittorrent/ -------------------------------------------------------------------------------- /res/qbittorrent/archive/qbittorrent-nox_4.1.6.99_201907311051-6714-9c2a114_ubuntu18.04.1_amd64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/qbittorrent/archive/qbittorrent-nox_4.1.6.99_201907311051-6714-9c2a114_ubuntu18.04.1_amd64 -------------------------------------------------------------------------------- /res/qbittorrent/archive/qbittorrent-nox_4.1.6.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/qbittorrent/archive/qbittorrent-nox_4.1.6.deb -------------------------------------------------------------------------------- /res/qbittorrent/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/qbittorrent/favicon.ico -------------------------------------------------------------------------------- /res/qbittorrent/qBittorrent.conf: -------------------------------------------------------------------------------- 1 | [AutoRun] 2 | enabled=true 3 | program=chmod -R 666 \"%D\" 4 | 5 | [BitTorrent] 6 | Session\AnnounceToAllTiers=true 7 | Session\AsyncIOThreadsCount=8 8 | Session\CheckingMemUsageSize=64 9 | Session\CoalesceReadWrite=true 10 | Session\CreateTorrentSubfolder=true 11 | Session\DisableAutoTMMByDefault=false 12 | Session\DisableAutoTMMTriggers\CategoryChanged=false 13 | Session\DisableAutoTMMTriggers\CategorySavePathChanged=false 14 | Session\DisableAutoTMMTriggers\DefaultSavePathChanged=false 15 | Session\GuidedReadCache=true 16 | Session\MultiConnectionsPerIp=true 17 | Session\SuggestMode=true 18 | 19 | [Core] 20 | AutoDeleteAddedTorrentFile=IfAdded 21 | 22 | [Preferences] 23 | Advanced\AnnounceToAllTrackers=true 24 | Advanced\IncludeOverhead=false 25 | Advanced\IgnoreLimitsLAN=true 26 | Advanced\osCache=true 27 | Advanced\SuperSeeding=true 28 | Advanced\trackerEnabled=true 29 | Bittorrent\AddTrackers=true 30 | Bittorrent\DHT=true 31 | Bittorrent\LSD=true 32 | Bittorrent\MaxConnecs=-1 33 | Bittorrent\MaxConnecsPerTorrent=-1 34 | Bittorrent\PeX=true 35 | Bittorrent\TrackersList=http://nyaa.tracker.wf:7777/announce\n\nhttp://sukebei.tracker.wf:8888/announce\n\nudp://tracker.coppersurfer.tk:6969/announce\n\nudp://tracker.open-internet.nl:6969/announce\n\nudp://tracker.leechers-paradise.org:6969/announce\n\nudp://tracker.internetwarriors.net:1337/announce\n\nudp://eddie4.nl:6969/announce\n\nudp://tracker.opentrackr.org:1337/announce\n\nudp://p4p.arenabg.ch:1337/announce\n\nudp://9.rarbg.me:2710/announce\n\nudp://9.rarbg.to:2710/announce\n\nhttp://explodie.org:6969/announce\n\nudp://torrent.gresille.org:80/announce\n\nudp://tracker.blackunicorn.xyz:6969/announce\n\nudp://tracker4.piratux.com:6969/announce\n\nudp://glotorrents.pw:6969/announce\n\nudp://tracker.trackerfix.com:80/announce\n\nudp://tracker.pomf.se:80/announce\n\nhttp://tracker.publicbt.com/announce\n\nhttp://bigfoot1942.sektori.org:6969/announce\n\nhttp://open.nyaatorrents.info:6544/announce\n\nhttp://tracker.tfile.me/announce\n\nudp://tracker.openbittorrent.com:80/announce\n\nudp://tracker.publicbt.com:80/announce\n\nudp://tracker.piratepublic.com:1337/announce\n\nhttp://glotorrents.com:6969/announce\n\nudp://tracker.aletorrenty.pl:2710/announce\n\nhttp://mgtracker.org:2710/announce\n\nhttp://tracker3.itzmx.com:6961/announce\n\nhttp://tracker1.itzmx.com:8080/announce\n\nudp://exodus.desync.com:6969/announce\n\nudp://explodie.org:6969/announce\n\nudp://ipv4.tracker.harry.lu:80/announce\n\nudp://denis.stalker.upeer.me:6969/announce\n\nudp://tracker.torrent.eu.org:451/announce\n\nudp://tracker.tiny-vps.com:6969/announce\n\nudp://thetracker.org:80/announce\n\nudp://open.demonii.si:1337/announce\n\nudp://tracker4.itzmx.com:2710/announce\n\nudp://tracker.cyberia.is:6969/announce\n\nudp://retracker.netbynet.ru:2710/announce\n\nudp://62.138.0.158:6969/announce\n\nudp://188.241.58.209:6969/announce\n\nudp://185.225.17.100:1337/announce\n\nudp://62.210.79.110:1337/announce\n\nudp://151.80.120.112:2710/announce\n\nudp://151.80.120.114:2710/announce\n\nhttp://176.113.71.19:6961/announce\n\nhttp://172.64.195.37:8080/announce\n\nudp://208.83.20.20:6969/announce\n\nudp://184.105.151.164:6969/announce\n\nudp://51.15.40.114:80/announce\n\nudp://5.2.79.22:6969/announce\n\nudp://91.216.110.52:451/announce\n\nudp://5.206.58.23:6969/announce\n\nudp://176.31.106.35:80/announce\n\nudp://5.2.79.219:1337/announce\n\nudp://212.1.226.176:2710/announce\n\nudp://159.100.245.181:6969/announce\n\nudp://tracker.zer0day.to:1337/announce\n\nudp://tracker.ilibr.org:6969/announce\n\nudp://p4p.arenabg.com:1337/announce\n\nudp://tracker.leechers-paradise.org:6969\n\nudp://tracker.coppersurfer.tk\n\nudp://tracker.opentrackr.org:1337\n\nudp://tracker.pirateparty.gr\n\nudp://tracker.justseed.it:1337\n\nhttp://tracker.ex.ua/announce\n\nhttp://pow7.com/announce\n\nhttp://retracker.krs-ix.ru/announce\n\nudp://9.rarbg.com:2710/announce\n\nhttp://tracker.internetwarriors.net:1337/announce\n\nhttp://tracker.opentrackr.org:1337/announce\n\nudp://retracker.lanta-net.ru:2710/announce\n\nudp://open.stealth.si:80/announce\n\nudp://bt.xxx-tracker.com:2710/announce\n\nudp://tracker2.itzmx.com:6961/announce\n\nhttp://tracker2.itzmx.com:6961/announce\n\nhttp://tracker4.itzmx.com:2710/announce\n\nhttp://open.acgnxtracker.com:80/announce\n\nhttp://retracker.mgts.by:80/announce\n\nudp://tracker.uw0.xyz:6969/announce\n\nudp://tracker.moeking.me:6969/announce\n\nudp://tracker.iamhansen.xyz:2000/announce\n\nudp://tracker.tvunderground.org.ru:3218/announce\n\nhttp://tracker.tvunderground.org.ru:3218/announce\n\nudp://zephir.monocul.us:6969/announce\n\nudp://tracker.trackton.ga:7070/announce\n\nudp://tracker.swateam.org.uk:2710/announce\n\nudp://tracker.supertracker.net:1337/announce\n\nudp://tracker.nyaa.uk:6969/announce\n\nudp://tracker.nibba.trade:1337/announce\n\nudp://tracker.lelux.fi:6969/announce\n\nudp://tracker.fixr.pro:6969/announce\n\nudp://tracker.filepit.to:6969/announce\n\nudp://tracker.filemail.com:6969/announce\n\nudp://tracker-udp.gbitt.info:80/announce\n\nudp://retracker.sevstar.net:2710/announce\n\nudp://retracker.maxnet.ua:80/announce\n\nudp://retracker.baikal-telecom.net:2710/announce\n\nudp://retracker.akado-ural.ru:80/announce\n\nudp://pubt.in:2710/announce\n\nudp://chihaya.toss.li:9696/announce\n\nhttps://tracker.vectahosting.eu:2053/announce\n\nhttps://tracker.lelux.fi:443/announce\n\nhttps://tracker.gbitt.info:443/announce\n\nhttps://tracker.fastdownload.xyz:443/announce\n\nhttps://t.quic.ws:443/announce\n\nhttp://vps02.net.orel.ru:80/announce\n\nhttp://tracker01.loveapp.com:6789/announce\n\nhttp://tracker.torrentyorg.pl:80/announce\n\nhttp://tracker.lelux.fi:80/announce\n\nhttp://tracker.gbitt.info:80/announce\n\nhttp://tracker.bt4g.com:2095/announce\n\nhttp://torrent.nwps.ws:80/announce\n\nhttp://t.nyaatracker.com:80/announce\n\nhttp://retracker.sevstar.net:2710/announce\n\nhttp://open.trackerlist.xyz:80/announce\n\nhttp://gwp2-v19.rinet.ru:80/announce\n\nudp://tracker.msm8916.com:6969/announce\n\nudp://tracker.justseed.it:1337/announce\n\nudp://newtoncity.org:6969/announce\n\nudp://bt.dy20188.com:80/announce\n\nhttps://tracker.publictorrent.net:443/announce\n\nhttps://1337.abcvg.info:443/announce\n\nhttp://tracker.publictorrent.net:80/announce\n\nhttp://t.acg.rip:6699/announce\n\nhttp://sub4all.org:2710/announce\n\nhttp://share.camoe.cn:8080/announce\n\nhttp://newtoncity.org:6969/announce\n\nhttp://bt-tracker.gamexp.ru:2710/announce\n\nudp://9.rarbg.to:2740/announce\n\nudp://9.rarbg.to:2730/announce\n\nudp://9.rarbg.me:2770/announce\n\nudp://9.rarbg.me:2730/announce\n\nudp://9.rarbg.to:2720/announce\n\nudp://9.rarbg.me:2740/announce\n\nudp://9.rarbg.to:2770/announce\n\nudp://tracker.mg64.net:6969/announce\n\nudp://tracker.port443.xyz:6969/announce\n\nudp://ipv6.tracker.harry.lu:80/announce\n 36 | Bittorrent\uTP_rate_limited=false 37 | Connection\GlobalDLLimitAlt=0 38 | Connection\GlobalUPLimitAlt=0 39 | Connection\PortRangeMin=12121 40 | Connection\ResolvePeerCountries=true 41 | Connection\ResolvePeerHostNames=true 42 | Downloads\DiskWriteCacheSize=-1 43 | Downloads\PreAllocation=false 44 | Downloads\SavePath=/content/qBittorrent/ 45 | Downloads\SaveResumeDataInterval=10 46 | Downloads\ScanDirsV2=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0\x12\0/\0\x63\0o\0n\0t\0\x65\0n\0t\0/\0\0\0\x2\0\0\0\x1) 47 | Downloads\StartInPause=false 48 | Downloads\TempPath=/root/.qBittorrent_temp/ 49 | Downloads\TempPathEnabled=true 50 | DynDNS\DomainName=changeme.dyndns.org 51 | DynDNS\Enabled=false 52 | DynDNS\Password= 53 | DynDNS\Service=0 54 | DynDNS\Username= 55 | General\Locale=en 56 | General\PreventFromSuspendWhenDownloading=true 57 | General\PreventFromSuspendWhenSeeding=true 58 | General\UseRandomPort=false 59 | Queueing\QueueingEnabled=false 60 | MailNotification\email= 61 | MailNotification\enabled=false 62 | MailNotification\password= 63 | MailNotification\req_auth=true 64 | MailNotification\req_ssl=false 65 | MailNotification\sender=qBittorrent_notification@example.com 66 | MailNotification\smtp_server=smtp.changeme.com 67 | MailNotification\username= 68 | WebUI\Address=* 69 | WebUI\AlternativeUIEnabled=false 70 | WebUI\AuthSubnetWhitelist=@Invalid() 71 | WebUI\AuthSubnetWhitelistEnabled=false 72 | WebUI\CSRFProtection=true 73 | WebUI\ClickjackingProtection=true 74 | WebUI\HTTPS\Enabled=false 75 | WebUI\HostHeaderValidation=true 76 | WebUI\LocalHostAuth=false 77 | WebUI\Password_ha1=@ByteArray(322517f6a6fc65697957a1f9da700b43) 78 | WebUI\Port=6006 79 | WebUI\RootFolder= 80 | WebUI\ServerDomains=* 81 | WebUI\SessionTimeout=36000 82 | WebUI\UseUPnP=true 83 | WebUI\Username=rclonelab 84 | -------------------------------------------------------------------------------- /res/rclonelab/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/rclonelab/01.png -------------------------------------------------------------------------------- /res/rclonelab/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szyha/RcloneLabArchive/133139a7ff2335d038ae62335fcdcb489fed828d/res/rclonelab/favicon.ico -------------------------------------------------------------------------------- /res/rtorrent/rtorrent.rc: -------------------------------------------------------------------------------- 1 | # Where rTorrent saves the downloaded files 2 | directory = /content/rTorrent 3 | 4 | # Where rTorrent saves the session 5 | session = ~/.rTorrent_session 6 | 7 | # Which ports rTorrent can use (Make sure to open them in your router) 8 | port_range = 50000-50000 9 | port_random = no 10 | 11 | # Check the hash after the end of the download 12 | check_hash = yes 13 | 14 | # Enable DHT (for torrents without trackers) 15 | dht = on 16 | dht_port = 6881 17 | peer_exchange = yes 18 | 19 | # Authorize UDP trackers 20 | use_udp_trackers = yes 21 | 22 | # Enable encryption when possible 23 | encryption = allow_incoming,try_outgoing,enable_retry 24 | 25 | # Performance Tuning 26 | throttle.max_downloads.set = 100 27 | throttle.max_uploads.set = 100 28 | min_peers = 199 29 | max_peers = 200 30 | pieces.memory.max.set = 4096M 31 | check_hash = no 32 | 33 | # SCGI port, used to communicate with Flood 34 | scgi_port = 127.0.0.1:5000 --------------------------------------------------------------------------------