ittup 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ittup-1.1.0/LICENSE +22 -0
- ittup-1.1.0/PKG-INFO +182 -0
- ittup-1.1.0/README.rst +149 -0
- ittup-1.1.0/ittup/__init__.py +1 -0
- ittup-1.1.0/ittup/__main__.py +5 -0
- ittup-1.1.0/ittup/common/__init__.py +4 -0
- ittup-1.1.0/ittup/common/about.py +15 -0
- ittup-1.1.0/ittup/common/bdinfo_string.py +98 -0
- ittup-1.1.0/ittup/common/bittorrent.py +14 -0
- ittup-1.1.0/ittup/common/command.py +162 -0
- ittup-1.1.0/ittup/common/constants.py +18 -0
- ittup-1.1.0/ittup/common/database.py +78 -0
- ittup-1.1.0/ittup/common/external_services/__init__.py +9 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/client.py +305 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/ftpx_service.py +76 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/ftpx_session.py +159 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/menu.py +17 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/models/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/ftpx/core/models/list.py +17 -0
- ittup-1.1.0/ittup/common/external_services/igdb/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/igdb/client.py +262 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/api.py +70 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/models/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/models/search.py +13 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/platformid.py +24 -0
- ittup-1.1.0/ittup/common/external_services/igdb/core/tags.py +13 -0
- ittup-1.1.0/ittup/common/external_services/imageHost.py +324 -0
- ittup-1.1.0/ittup/common/external_services/mediaresult.py +25 -0
- ittup-1.1.0/ittup/common/external_services/sessions/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/sessions/agents.py +212 -0
- ittup-1.1.0/ittup/common/external_services/sessions/exceptions.py +100 -0
- ittup-1.1.0/ittup/common/external_services/sessions/session.py +149 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/__init__.py +4 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/__init__.py +8 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/api.py +574 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/keywords.py +7 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/alternative.py +2 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/details.py +82 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/movie.py +48 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/nowplaying.py +69 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/release_info.py +49 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/translations.py +33 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/alternative.py +14 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/details.py +139 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +27 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/translations.py +45 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +50 -0
- ittup-1.1.0/ittup/common/external_services/theMovieDB/core/videos.py +21 -0
- ittup-1.1.0/ittup/common/external_services/trailers/__init__.py +3 -0
- ittup-1.1.0/ittup/common/external_services/trailers/api.py +120 -0
- ittup-1.1.0/ittup/common/external_services/trailers/response.py +51 -0
- ittup-1.1.0/ittup/common/external_services/tvdb.py +45 -0
- ittup-1.1.0/ittup/common/extractor.py +124 -0
- ittup-1.1.0/ittup/common/frames.py +221 -0
- ittup-1.1.0/ittup/common/mediainfo.py +206 -0
- ittup-1.1.0/ittup/common/mediainfo_string.py +103 -0
- ittup-1.1.0/ittup/common/settings.py +952 -0
- ittup-1.1.0/ittup/common/tags.py +415 -0
- ittup-1.1.0/ittup/common/title.py +127 -0
- ittup-1.1.0/ittup/common/torrent_clients.py +280 -0
- ittup-1.1.0/ittup/common/trackers/__init__.py +8 -0
- ittup-1.1.0/ittup/common/trackers/ban_list.py +5 -0
- ittup-1.1.0/ittup/common/trackers/data.py +22 -0
- ittup-1.1.0/ittup/common/trackers/itt.py +153 -0
- ittup-1.1.0/ittup/common/trackers/signs_list.py +293 -0
- ittup-1.1.0/ittup/common/trackers/tags_list.py +118 -0
- ittup-1.1.0/ittup/common/trackers/trackers.py +46 -0
- ittup-1.1.0/ittup/common/utility.py +394 -0
- ittup-1.1.0/ittup/core/__init__.py +5 -0
- ittup-1.1.0/ittup/core/__main__.py +289 -0
- ittup-1.1.0/ittup/core/automode.py +122 -0
- ittup-1.1.0/ittup/core/bot.py +294 -0
- ittup-1.1.0/ittup/core/duplicate.py +270 -0
- ittup-1.1.0/ittup/core/exceptions.py +122 -0
- ittup-1.1.0/ittup/core/media.py +378 -0
- ittup-1.1.0/ittup/core/media_manager/ContentManager.py +199 -0
- ittup-1.1.0/ittup/core/media_manager/DocuManager.py +76 -0
- ittup-1.1.0/ittup/core/media_manager/GameManager.py +107 -0
- ittup-1.1.0/ittup/core/media_manager/MediaInfoManager.py +26 -0
- ittup-1.1.0/ittup/core/media_manager/SeedManager.py +49 -0
- ittup-1.1.0/ittup/core/media_manager/TorrentManager.py +153 -0
- ittup-1.1.0/ittup/core/media_manager/VideoManager.py +145 -0
- ittup-1.1.0/ittup/core/media_manager/__init__.py +0 -0
- ittup-1.1.0/ittup/core/media_manager/common.py +265 -0
- ittup-1.1.0/ittup/core/pvtDocu.py +123 -0
- ittup-1.1.0/ittup/core/pvtTorrent.py +78 -0
- ittup-1.1.0/ittup/core/pvtTracker.py +481 -0
- ittup-1.1.0/ittup/core/pvtVideo.py +104 -0
- ittup-1.1.0/ittup/core/torrent.py +467 -0
- ittup-1.1.0/ittup/core/upload.py +168 -0
- ittup-1.1.0/ittup/view/__init__.py +3 -0
- ittup-1.1.0/ittup/view/custom_console.py +148 -0
- ittup-1.1.0/ittup.egg-info/PKG-INFO +182 -0
- ittup-1.1.0/ittup.egg-info/SOURCES.txt +105 -0
- ittup-1.1.0/ittup.egg-info/dependency_links.txt +1 -0
- ittup-1.1.0/ittup.egg-info/entry_points.txt +2 -0
- ittup-1.1.0/ittup.egg-info/requires.txt +19 -0
- ittup-1.1.0/ittup.egg-info/top_level.txt +1 -0
- ittup-1.1.0/pyproject.toml +34 -0
- ittup-1.1.0/requirements.txt +19 -0
- ittup-1.1.0/setup.cfg +4 -0
ittup-1.1.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 31December99
|
|
4
|
+
Copyright (c) 2026 TehMaat
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
ittup-1.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ittup
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: ItaTorrents uploader
|
|
5
|
+
Author: Parzival, TehMaat
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/TehMaat/ittup
|
|
8
|
+
Project-URL: Repository, https://github.com/TehMaat/ittup
|
|
9
|
+
Project-URL: Issues, https://github.com/TehMaat/ittup/issues
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/x-rst
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: guessit==3.8.0
|
|
14
|
+
Requires-Dist: pymediainfo==7.0.1
|
|
15
|
+
Requires-Dist: qbittorrent-api==2026.6.0
|
|
16
|
+
Requires-Dist: pydantic==2.13.4
|
|
17
|
+
Requires-Dist: requests==2.34.2
|
|
18
|
+
Requires-Dist: rich==15.0.0
|
|
19
|
+
Requires-Dist: torf==4.3.1
|
|
20
|
+
Requires-Dist: tqdm==4.68.2
|
|
21
|
+
Requires-Dist: thefuzz==0.22.1
|
|
22
|
+
Requires-Dist: Unidecode==1.4.0
|
|
23
|
+
Requires-Dist: pillow==12.2.0
|
|
24
|
+
Requires-Dist: patool==4.0.5
|
|
25
|
+
Requires-Dist: diskcache==5.6.3
|
|
26
|
+
Requires-Dist: httpx==0.28.1
|
|
27
|
+
Requires-Dist: transmission-rpc==7.0.11
|
|
28
|
+
Requires-Dist: pathvalidate==3.3.1
|
|
29
|
+
Requires-Dist: bencode2==0.3.30
|
|
30
|
+
Requires-Dist: rtorrent-rpc==0.9.7
|
|
31
|
+
Requires-Dist: tvdb-v4-official==1.1.0
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
ittup - ItaTorrents uploader
|
|
36
|
+
===============================================
|
|
37
|
+
|version| |online| |status| |python| |ubuntu| |debian| |windows|
|
|
38
|
+
|
|
39
|
+
.. |version| image:: https://img.shields.io/github/v/tag/TehMaat/ittup?label=version
|
|
40
|
+
.. |online| image:: https://img.shields.io/badge/Online-green
|
|
41
|
+
.. |status| image:: https://img.shields.io/badge/Status-Active-brightgreen
|
|
42
|
+
.. |python| image:: https://img.shields.io/badge/Python-3.10+-blue
|
|
43
|
+
.. |ubuntu| image:: https://img.shields.io/badge/Ubuntu-22-blue
|
|
44
|
+
.. |debian| image:: https://img.shields.io/badge/Debian-12-blue
|
|
45
|
+
.. |windows| image:: https://img.shields.io/badge/Windows-10-blue
|
|
46
|
+
|
|
47
|
+
Auto Torrent Generator and Uploader for ItaTorrents
|
|
48
|
+
===================================================
|
|
49
|
+
|
|
50
|
+
**ittup** generates and uploads torrents to `ItaTorrents <https://itatorrents.xyz>`_ based on input provided
|
|
51
|
+
for movies or TV series and Games.
|
|
52
|
+
|
|
53
|
+
Repository: https://github.com/TehMaat/ittup
|
|
54
|
+
|
|
55
|
+
ittup is a fork of `Unit3Dup <https://github.com/31December99/Unit3Dup>`_ by 31December99,
|
|
56
|
+
reduced to the ItaTorrents tracker only.
|
|
57
|
+
|
|
58
|
+
It performs the following tasks:
|
|
59
|
+
|
|
60
|
+
- Scan folder and subfolders
|
|
61
|
+
- Compiles various metadata information to create a torrent
|
|
62
|
+
- Extracts a series of screenshots directly from the video
|
|
63
|
+
- Add webp to your torrent description page
|
|
64
|
+
- Extracts cover from the PDF documents
|
|
65
|
+
- Generates meta-info derived from the video or game
|
|
66
|
+
- Searches for the corresponding ID on TMDB, IGDB, IMDB,TVDB
|
|
67
|
+
- Add trailer from TMDB or YouTube
|
|
68
|
+
- Seeding in qBittorrent, Transmission or rTorrent
|
|
69
|
+
- Reseeding one or more torrents at a time
|
|
70
|
+
- Seed your torrents across different OS
|
|
71
|
+
- Generate various tags for titles: ``version``, ``resolution``, ``uhd``, ``platform``, ``source``, ``remux``, ``multi``, ``acodec``, ``channels``, ``flag``, ``subtitle``, ``vcodec``, ``hdr``, ``video_encoder``
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
ittup can grab the first page, convert it to an image (using xpdf),
|
|
75
|
+
and then the bot can upload it to an image host, then add the link to the torrent page description.
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Install and Upgrade
|
|
79
|
+
===================
|
|
80
|
+
|
|
81
|
+
- pip install --upgrade git+https://github.com/TehMaat/ittup
|
|
82
|
+
|
|
83
|
+
If you had Unit3Dup installed, uninstall it first::
|
|
84
|
+
|
|
85
|
+
pip uninstall unit3dup
|
|
86
|
+
|
|
87
|
+
All of ittup's code lives in the single ``ittup`` package (``ittup.core``, ``ittup.common``, ``ittup.view``);
|
|
88
|
+
removing Unit3Dup also removes the old top-level ``common``, ``view`` and ``unit3dup`` modules it left behind.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
Configuration
|
|
92
|
+
-------------
|
|
93
|
+
The configuration is stored in ``~/ittup_config/ittup.json``
|
|
94
|
+
(Windows: ``%LOCALAPPDATA%\ittup_config\ittup.json``) together with
|
|
95
|
+
``tags_list.json``, ``sign_list.json`` and ``ban_list.json``.
|
|
96
|
+
|
|
97
|
+
Coming from Unit3Dup? On the first run, if ``Unit3Dup_config`` exists and ``ittup_config`` does not,
|
|
98
|
+
ittup *copies* your configuration (``Unit3Dbot.json`` becomes ``ittup.json``), tags, sign and ban lists
|
|
99
|
+
into the new folder. The old folder is left untouched. Settings of the removed trackers
|
|
100
|
+
(``SIS``, ``PTT``, ``AST``, ``MULTI_TRACKER``) are simply ignored.
|
|
101
|
+
|
|
102
|
+
Windows Dependencies
|
|
103
|
+
--------------------
|
|
104
|
+
1. Download and unzip https://www.ffmpeg.org/download.html and add its folder to
|
|
105
|
+
PATH environment user variable
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
Only for pdf
|
|
109
|
+
~~~~~~~~~~~~
|
|
110
|
+
1. Download and unzip poppler for Windows from https://github.com/oschwartz10612/poppler-windows/releases
|
|
111
|
+
2. Put the folder 'bin' in the system path (e.g. ``C:\poppler-24.08.0\Library\bin``)
|
|
112
|
+
3. *Close and reopen a new console window*
|
|
113
|
+
4. Test it: Run ``pdftocairo`` in the terminal
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
Ubuntu/Debian Dependencies
|
|
117
|
+
--------------------------
|
|
118
|
+
- sudo apt install ffmpeg
|
|
119
|
+
|
|
120
|
+
Only for pdf
|
|
121
|
+
~~~~~~~~~~~~
|
|
122
|
+
- sudo apt install poppler-utils
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
RUN
|
|
126
|
+
======
|
|
127
|
+
|
|
128
|
+
.. code-block:: python
|
|
129
|
+
|
|
130
|
+
ittup -u <filepath>
|
|
131
|
+
ittup -f <folderpath>
|
|
132
|
+
ittup -scan <folderpath>
|
|
133
|
+
|
|
134
|
+
Every upload goes to ItaTorrents: the ``-tracker`` and ``-mt`` options no longer exist.
|
|
135
|
+
Run ``ittup -h`` for the full list of commands.
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
DOC
|
|
140
|
+
===
|
|
141
|
+
|
|
142
|
+
The documentation (English and Italian) is at https://tehmaat.github.io/ittup/
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
ImageHost
|
|
146
|
+
=========
|
|
147
|
+
|
|
148
|
+
The bot can upload images to the following image hosting platforms:
|
|
149
|
+
|
|
150
|
+
+------------------+----------------------------+
|
|
151
|
+
| **Image Host** | **URL** |
|
|
152
|
+
+==================+============================+
|
|
153
|
+
| ``ImgBB`` | https://imgbb.com |
|
|
154
|
+
+------------------+----------------------------+
|
|
155
|
+
| ``FreeImage`` | https://freeimage.host |
|
|
156
|
+
+------------------+----------------------------+
|
|
157
|
+
| ``PtScreens`` | https://ptscreens.com |
|
|
158
|
+
+------------------+----------------------------+
|
|
159
|
+
| ``LensDump`` | https://lensdump.com |
|
|
160
|
+
+------------------+----------------------------+
|
|
161
|
+
| ``ImgFI`` | https://imgfi.com |
|
|
162
|
+
+------------------+----------------------------+
|
|
163
|
+
| ``PassIMA`` | https://passtheima.ge |
|
|
164
|
+
+------------------+----------------------------+
|
|
165
|
+
| ``ImaRide`` | https://www.imageride.net |
|
|
166
|
+
+------------------+----------------------------+
|
|
167
|
+
|
|
168
|
+
Trackers
|
|
169
|
+
========
|
|
170
|
+
|
|
171
|
+
The Italian tracker: a multitude of people from diverse technical and social backgrounds,
|
|
172
|
+
united by a shared passion for torrents and more
|
|
173
|
+
|
|
174
|
+
+------------------+----------------------------+
|
|
175
|
+
| **Trackers** | **Description** |
|
|
176
|
+
+==================+============================+
|
|
177
|
+
| ``ITT`` | https://itatorrents.xyz |
|
|
178
|
+
+------------------+----------------------------+
|
|
179
|
+
|
|
180
|
+
.. image:: https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white&style=flat
|
|
181
|
+
:target: https://discord.gg/VMYaVzq2AF
|
|
182
|
+
:alt: Discord Server
|
ittup-1.1.0/README.rst
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
|
|
2
|
+
ittup - ItaTorrents uploader
|
|
3
|
+
===============================================
|
|
4
|
+
|version| |online| |status| |python| |ubuntu| |debian| |windows|
|
|
5
|
+
|
|
6
|
+
.. |version| image:: https://img.shields.io/github/v/tag/TehMaat/ittup?label=version
|
|
7
|
+
.. |online| image:: https://img.shields.io/badge/Online-green
|
|
8
|
+
.. |status| image:: https://img.shields.io/badge/Status-Active-brightgreen
|
|
9
|
+
.. |python| image:: https://img.shields.io/badge/Python-3.10+-blue
|
|
10
|
+
.. |ubuntu| image:: https://img.shields.io/badge/Ubuntu-22-blue
|
|
11
|
+
.. |debian| image:: https://img.shields.io/badge/Debian-12-blue
|
|
12
|
+
.. |windows| image:: https://img.shields.io/badge/Windows-10-blue
|
|
13
|
+
|
|
14
|
+
Auto Torrent Generator and Uploader for ItaTorrents
|
|
15
|
+
===================================================
|
|
16
|
+
|
|
17
|
+
**ittup** generates and uploads torrents to `ItaTorrents <https://itatorrents.xyz>`_ based on input provided
|
|
18
|
+
for movies or TV series and Games.
|
|
19
|
+
|
|
20
|
+
Repository: https://github.com/TehMaat/ittup
|
|
21
|
+
|
|
22
|
+
ittup is a fork of `Unit3Dup <https://github.com/31December99/Unit3Dup>`_ by 31December99,
|
|
23
|
+
reduced to the ItaTorrents tracker only.
|
|
24
|
+
|
|
25
|
+
It performs the following tasks:
|
|
26
|
+
|
|
27
|
+
- Scan folder and subfolders
|
|
28
|
+
- Compiles various metadata information to create a torrent
|
|
29
|
+
- Extracts a series of screenshots directly from the video
|
|
30
|
+
- Add webp to your torrent description page
|
|
31
|
+
- Extracts cover from the PDF documents
|
|
32
|
+
- Generates meta-info derived from the video or game
|
|
33
|
+
- Searches for the corresponding ID on TMDB, IGDB, IMDB,TVDB
|
|
34
|
+
- Add trailer from TMDB or YouTube
|
|
35
|
+
- Seeding in qBittorrent, Transmission or rTorrent
|
|
36
|
+
- Reseeding one or more torrents at a time
|
|
37
|
+
- Seed your torrents across different OS
|
|
38
|
+
- Generate various tags for titles: ``version``, ``resolution``, ``uhd``, ``platform``, ``source``, ``remux``, ``multi``, ``acodec``, ``channels``, ``flag``, ``subtitle``, ``vcodec``, ``hdr``, ``video_encoder``
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
ittup can grab the first page, convert it to an image (using xpdf),
|
|
42
|
+
and then the bot can upload it to an image host, then add the link to the torrent page description.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
Install and Upgrade
|
|
46
|
+
===================
|
|
47
|
+
|
|
48
|
+
- pip install --upgrade git+https://github.com/TehMaat/ittup
|
|
49
|
+
|
|
50
|
+
If you had Unit3Dup installed, uninstall it first::
|
|
51
|
+
|
|
52
|
+
pip uninstall unit3dup
|
|
53
|
+
|
|
54
|
+
All of ittup's code lives in the single ``ittup`` package (``ittup.core``, ``ittup.common``, ``ittup.view``);
|
|
55
|
+
removing Unit3Dup also removes the old top-level ``common``, ``view`` and ``unit3dup`` modules it left behind.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
Configuration
|
|
59
|
+
-------------
|
|
60
|
+
The configuration is stored in ``~/ittup_config/ittup.json``
|
|
61
|
+
(Windows: ``%LOCALAPPDATA%\ittup_config\ittup.json``) together with
|
|
62
|
+
``tags_list.json``, ``sign_list.json`` and ``ban_list.json``.
|
|
63
|
+
|
|
64
|
+
Coming from Unit3Dup? On the first run, if ``Unit3Dup_config`` exists and ``ittup_config`` does not,
|
|
65
|
+
ittup *copies* your configuration (``Unit3Dbot.json`` becomes ``ittup.json``), tags, sign and ban lists
|
|
66
|
+
into the new folder. The old folder is left untouched. Settings of the removed trackers
|
|
67
|
+
(``SIS``, ``PTT``, ``AST``, ``MULTI_TRACKER``) are simply ignored.
|
|
68
|
+
|
|
69
|
+
Windows Dependencies
|
|
70
|
+
--------------------
|
|
71
|
+
1. Download and unzip https://www.ffmpeg.org/download.html and add its folder to
|
|
72
|
+
PATH environment user variable
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
Only for pdf
|
|
76
|
+
~~~~~~~~~~~~
|
|
77
|
+
1. Download and unzip poppler for Windows from https://github.com/oschwartz10612/poppler-windows/releases
|
|
78
|
+
2. Put the folder 'bin' in the system path (e.g. ``C:\poppler-24.08.0\Library\bin``)
|
|
79
|
+
3. *Close and reopen a new console window*
|
|
80
|
+
4. Test it: Run ``pdftocairo`` in the terminal
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
Ubuntu/Debian Dependencies
|
|
84
|
+
--------------------------
|
|
85
|
+
- sudo apt install ffmpeg
|
|
86
|
+
|
|
87
|
+
Only for pdf
|
|
88
|
+
~~~~~~~~~~~~
|
|
89
|
+
- sudo apt install poppler-utils
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
RUN
|
|
93
|
+
======
|
|
94
|
+
|
|
95
|
+
.. code-block:: python
|
|
96
|
+
|
|
97
|
+
ittup -u <filepath>
|
|
98
|
+
ittup -f <folderpath>
|
|
99
|
+
ittup -scan <folderpath>
|
|
100
|
+
|
|
101
|
+
Every upload goes to ItaTorrents: the ``-tracker`` and ``-mt`` options no longer exist.
|
|
102
|
+
Run ``ittup -h`` for the full list of commands.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
DOC
|
|
107
|
+
===
|
|
108
|
+
|
|
109
|
+
The documentation (English and Italian) is at https://tehmaat.github.io/ittup/
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
ImageHost
|
|
113
|
+
=========
|
|
114
|
+
|
|
115
|
+
The bot can upload images to the following image hosting platforms:
|
|
116
|
+
|
|
117
|
+
+------------------+----------------------------+
|
|
118
|
+
| **Image Host** | **URL** |
|
|
119
|
+
+==================+============================+
|
|
120
|
+
| ``ImgBB`` | https://imgbb.com |
|
|
121
|
+
+------------------+----------------------------+
|
|
122
|
+
| ``FreeImage`` | https://freeimage.host |
|
|
123
|
+
+------------------+----------------------------+
|
|
124
|
+
| ``PtScreens`` | https://ptscreens.com |
|
|
125
|
+
+------------------+----------------------------+
|
|
126
|
+
| ``LensDump`` | https://lensdump.com |
|
|
127
|
+
+------------------+----------------------------+
|
|
128
|
+
| ``ImgFI`` | https://imgfi.com |
|
|
129
|
+
+------------------+----------------------------+
|
|
130
|
+
| ``PassIMA`` | https://passtheima.ge |
|
|
131
|
+
+------------------+----------------------------+
|
|
132
|
+
| ``ImaRide`` | https://www.imageride.net |
|
|
133
|
+
+------------------+----------------------------+
|
|
134
|
+
|
|
135
|
+
Trackers
|
|
136
|
+
========
|
|
137
|
+
|
|
138
|
+
The Italian tracker: a multitude of people from diverse technical and social backgrounds,
|
|
139
|
+
united by a shared passion for torrents and more
|
|
140
|
+
|
|
141
|
+
+------------------+----------------------------+
|
|
142
|
+
| **Trackers** | **Description** |
|
|
143
|
+
+==================+============================+
|
|
144
|
+
| ``ITT`` | https://itatorrents.xyz |
|
|
145
|
+
+------------------+----------------------------+
|
|
146
|
+
|
|
147
|
+
.. image:: https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white&style=flat
|
|
148
|
+
:target: https://discord.gg/VMYaVzq2AF
|
|
149
|
+
:alt: Discord Server
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from importlib.metadata import PackageNotFoundError, version as _package_version
|
|
3
|
+
|
|
4
|
+
APP_NAME = "ittup"
|
|
5
|
+
APP_DESCRIPTION = "ItaTorrents uploader"
|
|
6
|
+
REPO_URL = "https://github.com/TehMaat/ittup"
|
|
7
|
+
|
|
8
|
+
# The version is defined only in pyproject.toml and read from the installed package metadata
|
|
9
|
+
try:
|
|
10
|
+
__version__ = _package_version(APP_NAME)
|
|
11
|
+
except PackageNotFoundError:
|
|
12
|
+
# Running from a source checkout without installing the package
|
|
13
|
+
__version__ = "0.0.0+unknown"
|
|
14
|
+
|
|
15
|
+
USER_AGENT = f"{APP_NAME}/{__version__} (+{REPO_URL})"
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
class BDInfo:
|
|
4
|
+
"""
|
|
5
|
+
A class to represent information about a Blu-ray disc.
|
|
6
|
+
|
|
7
|
+
Attributes:
|
|
8
|
+
disc_label (str): The label or name of the disc.
|
|
9
|
+
disc_size (str): The size of the disc.
|
|
10
|
+
protection (str): The type of protection applied to the disc.
|
|
11
|
+
playlist (str): The playlist information.
|
|
12
|
+
size (str): The size of the content on the disc.
|
|
13
|
+
length (str): The length of the content on the disc.
|
|
14
|
+
total_bitrate (str): The total bitrate of the disc content.
|
|
15
|
+
video (str): The video specifications.
|
|
16
|
+
audio (list[str]): A list of audio specifications.
|
|
17
|
+
languages (list[str]): A list of languages extracted from audio specifications.
|
|
18
|
+
subtitles (list[str]): A list of subtitle specifications.
|
|
19
|
+
|
|
20
|
+
Methods:
|
|
21
|
+
from_bdinfo_string(bd_info_string: str) -> 'BDInfo':
|
|
22
|
+
Creates an instance of BDInfo from a formatted string.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
disc_label: str,
|
|
28
|
+
disc_size: str,
|
|
29
|
+
protection: str,
|
|
30
|
+
playlist: str,
|
|
31
|
+
size: str,
|
|
32
|
+
length: str,
|
|
33
|
+
total_bitrate: str,
|
|
34
|
+
video: str,
|
|
35
|
+
audio: list[str],
|
|
36
|
+
languages: list[str],
|
|
37
|
+
subtitles: list[str],
|
|
38
|
+
):
|
|
39
|
+
self.disc_label = disc_label
|
|
40
|
+
self.disc_size = disc_size
|
|
41
|
+
self.protection = protection
|
|
42
|
+
self.playlist = playlist
|
|
43
|
+
self.size = size
|
|
44
|
+
self.length = length
|
|
45
|
+
self.total_bitrate = total_bitrate
|
|
46
|
+
self.video = video
|
|
47
|
+
self.audio = audio
|
|
48
|
+
self.languages = languages
|
|
49
|
+
self.subtitles = subtitles
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def from_bdinfo_string(cls, bd_info_string: str) -> 'BDInfo':
|
|
53
|
+
"""
|
|
54
|
+
Creates an instance of BDInfo from a formatted string.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
bd_info_string (str): A string containing Blu-ray disc information formatted with labels and values.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
BDInfo: An instance of the BDInfo class with attributes populated from the input string.
|
|
61
|
+
"""
|
|
62
|
+
lines = bd_info_string.strip().split("\n")
|
|
63
|
+
data = {"audio": [], "subtitles": []}
|
|
64
|
+
|
|
65
|
+
for line in lines:
|
|
66
|
+
# Parsing Audio
|
|
67
|
+
if ": " in line:
|
|
68
|
+
key, value = line.split(": ", 1)
|
|
69
|
+
key = key.strip().replace(" ", "_").lower()
|
|
70
|
+
|
|
71
|
+
if key == "audio":
|
|
72
|
+
data["audio"].append(value.strip().lower())
|
|
73
|
+
elif key == "subtitle":
|
|
74
|
+
data["subtitles"].append(value.strip().lower())
|
|
75
|
+
else:
|
|
76
|
+
data[key] = value.strip()
|
|
77
|
+
|
|
78
|
+
# Parsing Languages
|
|
79
|
+
languages_parsed = []
|
|
80
|
+
for item in data["audio"]:
|
|
81
|
+
item = item.replace("(", " ")
|
|
82
|
+
item = item.replace(")", " ")
|
|
83
|
+
item = item.split("/")
|
|
84
|
+
languages_parsed.append(item[0].strip())
|
|
85
|
+
|
|
86
|
+
return cls(
|
|
87
|
+
disc_label=data.get("disc_label"),
|
|
88
|
+
disc_size=data.get("disc_size"),
|
|
89
|
+
protection=data.get("protection"),
|
|
90
|
+
playlist=data.get("playlist"),
|
|
91
|
+
size=data.get("size"),
|
|
92
|
+
length=data.get("length"),
|
|
93
|
+
total_bitrate=data.get("total_bitrate"),
|
|
94
|
+
video=data.get("video"),
|
|
95
|
+
audio=data["audio"],
|
|
96
|
+
languages=languages_parsed,
|
|
97
|
+
subtitles=data["subtitles"],
|
|
98
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from ittup.core.pvtTorrent import Mytorrent
|
|
5
|
+
from ittup.core.media import Media
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class BittorrentData:
|
|
10
|
+
tracker_response: str
|
|
11
|
+
torrent_response: Mytorrent | None
|
|
12
|
+
content: Media
|
|
13
|
+
tracker_message: dict
|
|
14
|
+
archive_path: str
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
import os
|
|
3
|
+
import argparse
|
|
4
|
+
|
|
5
|
+
from ittup.common.utility import System
|
|
6
|
+
from ittup.common.about import APP_DESCRIPTION, APP_NAME
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class RemovedFlag(argparse.Action):
|
|
10
|
+
def __call__(self, parser, namespace, values, option_string=None):
|
|
11
|
+
parser.error(f"'{option_string}' has been removed: {APP_NAME} uploads only to ItaTorrents")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CommandLine:
|
|
15
|
+
"""
|
|
16
|
+
Handle command line arguments
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(self):
|
|
20
|
+
|
|
21
|
+
# /////////////////////////
|
|
22
|
+
# Main parser
|
|
23
|
+
# /////////////////////////
|
|
24
|
+
parser = argparse.ArgumentParser(
|
|
25
|
+
prog=APP_NAME,
|
|
26
|
+
description=f"{APP_DESCRIPTION}: manage torrents, uploads, searches and config checks",
|
|
27
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# /////////////////////////
|
|
31
|
+
# Groups
|
|
32
|
+
# /////////////////////////
|
|
33
|
+
cfg_group = parser.add_argument_group("Config Commands")
|
|
34
|
+
upload_group = parser.add_argument_group("Upload Commands")
|
|
35
|
+
search_group = parser.add_argument_group("Search Commands")
|
|
36
|
+
filter_group = parser.add_argument_group("Filter Options")
|
|
37
|
+
special_group = parser.add_argument_group("Special Flags")
|
|
38
|
+
|
|
39
|
+
# /////////////////////////
|
|
40
|
+
# Config Commands
|
|
41
|
+
# /////////////////////////
|
|
42
|
+
cfg_group.add_argument(
|
|
43
|
+
"-check", "--check",
|
|
44
|
+
action="store_true",
|
|
45
|
+
help="Check config files"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# /////////////////////////
|
|
49
|
+
# Upload Commands
|
|
50
|
+
# /////////////////////////
|
|
51
|
+
upload_group.add_argument("-u", "--upload", type=str, help="Upload path")
|
|
52
|
+
upload_group.add_argument("-f", "--folder", type=str, help="Upload folder")
|
|
53
|
+
upload_group.add_argument("-scan", "--scan", type=str, help="Scan folder")
|
|
54
|
+
upload_group.add_argument("-reseed", "--reseed", action="store_true", help="Reseed folder")
|
|
55
|
+
upload_group.add_argument("-watcher", "--watcher", action="store_true", help="Start watcher")
|
|
56
|
+
upload_group.add_argument("-notitle", "--notitle", type=str, help="Manual title")
|
|
57
|
+
|
|
58
|
+
upload_group.add_argument(
|
|
59
|
+
"-force",
|
|
60
|
+
nargs='?',
|
|
61
|
+
const="movie",
|
|
62
|
+
type=str,
|
|
63
|
+
default=None,
|
|
64
|
+
help="Force category"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
upload_group.add_argument("-noseed", "--noseed", action="store_true", help="Disable seeding")
|
|
68
|
+
upload_group.add_argument("-noup", "--noup", action="store_true", help="Torrent only")
|
|
69
|
+
upload_group.add_argument("-dup", "--duplicate", action="store_true", help="Check duplicates")
|
|
70
|
+
upload_group.add_argument("-personal", "--personal", action="store_true", help="Personal release")
|
|
71
|
+
upload_group.add_argument("-ftp", "--ftp", action="store_true", help="Connect FTP")
|
|
72
|
+
|
|
73
|
+
# Removed flags: ittup uploads only to ItaTorrents. Without this '-mt' would be parsed as '-m t'
|
|
74
|
+
upload_group.add_argument("-mt", "--mt", "-tracker", "--tracker", nargs='?', action=RemovedFlag,
|
|
75
|
+
help=argparse.SUPPRESS)
|
|
76
|
+
|
|
77
|
+
# /////////////////////////
|
|
78
|
+
# Search Commands
|
|
79
|
+
# /////////////////////////
|
|
80
|
+
search_group.add_argument("-dmp", "--dump", action="store_true", help="Dump titles")
|
|
81
|
+
search_group.add_argument("-sch", "--search", type=str, help="Search torrent")
|
|
82
|
+
search_group.add_argument("-db", "--dbsave", action="store_true", help="Save results")
|
|
83
|
+
search_group.add_argument("-i", "--info", type=str, help="Torrent info")
|
|
84
|
+
search_group.add_argument("-up", "--uploader", type=str, help="By uploader")
|
|
85
|
+
search_group.add_argument("-d", "--description", type=str, help="By description")
|
|
86
|
+
search_group.add_argument("-bd", "--bdinfo", type=str, help="Show BDInfo")
|
|
87
|
+
search_group.add_argument("-m", "--mediainfo", type=str, help="Show MediaInfo")
|
|
88
|
+
search_group.add_argument("-int", "--internal", action="store_true", help="Internal Release")
|
|
89
|
+
search_group.add_argument("-mod", "--moderation", action="store_true", help="In moderation")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# /////////////////////////
|
|
93
|
+
# Filter Options
|
|
94
|
+
# /////////////////////////
|
|
95
|
+
filter_group.add_argument("-st", "--startyear", type=str, help="Start year")
|
|
96
|
+
filter_group.add_argument("-en", "--endyear", type=str, help="End year")
|
|
97
|
+
filter_group.add_argument("-type", "--type", type=str, help="Type")
|
|
98
|
+
filter_group.add_argument("-res", "--resolution", type=str, help="Resolution")
|
|
99
|
+
filter_group.add_argument("-file", "--filename", type=str, help="Filename")
|
|
100
|
+
filter_group.add_argument("-se", "--season", type=str, help="Season")
|
|
101
|
+
filter_group.add_argument("-ep", "--episode", type=str, help="Episode")
|
|
102
|
+
|
|
103
|
+
# IDs
|
|
104
|
+
filter_group.add_argument("-tmdb", "--tmdb_id", type=str, help="TMDB ID")
|
|
105
|
+
filter_group.add_argument("-imdb", "--imdb_id", type=str, help="IMDB ID")
|
|
106
|
+
filter_group.add_argument("-tvdb", "--tvdb_id", type=int, help="TVDB ID")
|
|
107
|
+
filter_group.add_argument("-mal", "--mal_id", type=str, help="MAL ID")
|
|
108
|
+
filter_group.add_argument("-playid", "--playlist_id", type=str, help="Playlist ID")
|
|
109
|
+
filter_group.add_argument("-coll", "--collection_id", type=str, help="Collection ID")
|
|
110
|
+
|
|
111
|
+
# Status
|
|
112
|
+
filter_group.add_argument("-free", "--freelech", type=str, help="Freeleech")
|
|
113
|
+
filter_group.add_argument("-al", "--alive", action="store_true", help="Alive")
|
|
114
|
+
filter_group.add_argument("-dd", "--dead", action="store_true", help="Dead")
|
|
115
|
+
filter_group.add_argument("-dy", "--dying", action="store_true", help="Dying")
|
|
116
|
+
|
|
117
|
+
# /////////////////////////
|
|
118
|
+
# Special Flags
|
|
119
|
+
# /////////////////////////
|
|
120
|
+
special_group.add_argument("-du", "--doubleup", action="store_true", help="DoubleUp")
|
|
121
|
+
special_group.add_argument("-fe", "--featured", action="store_true", help="Featured")
|
|
122
|
+
special_group.add_argument("-re", "--refundable", action="store_true", help="Refundable")
|
|
123
|
+
special_group.add_argument("-str", "--stream", action="store_true", help="Stream")
|
|
124
|
+
special_group.add_argument("-sd", "--standard", action="store_true", help="SD")
|
|
125
|
+
special_group.add_argument("-hs", "--highspeed", action="store_true", help="Highspeed")
|
|
126
|
+
special_group.add_argument("-inter", "--intern_r", action="store_true", help="Internal Release")
|
|
127
|
+
special_group.add_argument("-pr", "--prelease", action="store_true", help="Personal")
|
|
128
|
+
|
|
129
|
+
# /////////////////////////
|
|
130
|
+
# Parse args
|
|
131
|
+
# /////////////////////////
|
|
132
|
+
self.args = parser.parse_args()
|
|
133
|
+
|
|
134
|
+
# /////////////////////////
|
|
135
|
+
# Check scan path
|
|
136
|
+
# /////////////////////////
|
|
137
|
+
self.is_dir = os.path.isdir(self.args.scan) if self.args.scan else None
|
|
138
|
+
|
|
139
|
+
# /////////////////////////
|
|
140
|
+
# Expand upload path
|
|
141
|
+
# /////////////////////////
|
|
142
|
+
if self.args.upload:
|
|
143
|
+
self.args.upload = os.path.expanduser(self.args.upload)
|
|
144
|
+
|
|
145
|
+
# /////////////////////////
|
|
146
|
+
# Validate force category
|
|
147
|
+
# /////////////////////////
|
|
148
|
+
if self.args.force:
|
|
149
|
+
|
|
150
|
+
self.args.force = self.args.force[:10]
|
|
151
|
+
|
|
152
|
+
valid_categories = [
|
|
153
|
+
System.category_list[System.MOVIE],
|
|
154
|
+
System.category_list[System.GAME],
|
|
155
|
+
System.category_list[System.TV_SHOW],
|
|
156
|
+
System.category_list[System.DOCUMENTARY]
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
if self.args.force.lower() not in valid_categories:
|
|
160
|
+
self.args.force = None
|
|
161
|
+
print("Invalid -force category")
|
|
162
|
+
exit()
|