├── .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 [](#contributors)
37 |
38 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
39 |
40 |
41 |
42 |
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 [](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 [](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 | "# "
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 | "# "
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 = \"\"\"{title} \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 | "# "
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 = \"\"\"{title} \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 = \"\"\"{title} \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 | "# "
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 = \"\"\"{title} \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(\" \"))\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 = \"\"\"{title} \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 | "# "
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 \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 = \"\"\"{title} \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 \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 = \"\"\"{title} \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 \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 = \"\"\"{title} \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
--------------------------------------------------------------------------------