Scripting your way to upload videos to peertube and youtube. Works with Python 3.5+.
Simply install with
pip install prismedia
pip install --upgrade prismedia
Get the source:
git clone https://git.lecygnenoir.info/LecygneNoir/prismedia.git prismedia
You may use pip to install requirements:
pip install -r requirements.txt if you want to use the script directly.
(note: requirements are generated via
poetry export -f requirements.txt)
Otherwise, you can use poetry, which create a virtualenv for the project directly (Or use the existing virtualenv if one is activated)
Generate configuration files by running
Then, edit them to fill your credential as explained below.
Configuration is in peertube_secret file. You need your usual credentials and Peertube instance URL, in addition with API client_id and client_secret.
You can get client_id and client_secret by logging in your peertube instance and reaching the URL: https://domain.example/api/v1/oauth-clients/local
Alternatively, you can set
OAUTHLIB_INSECURE_TRANSPORT to 1 if you do not use https (not recommended)
Configuration is in youtube_secret.json file. Youtube uses combination of oauth and API access to identify.
The first time you connect, prismedia will open your browser to ask you to authenticate to
Youtube and allow the app to use your Youtube channel.
It is here you choose which channel you will upload to.
Once authenticated, the token is stored inside the file
Prismedia will try to use this file at each launch, and re-ask for authentication if it does not exist.
Oauth: The default youtube_secret.json should allow you to upload some videos. If you plan a larger usage, please consider creating your own youtube_secret file:
Support only mp4 for cross compatibility between Youtube and Peertube. Note that all options may be specified in a NFO file! (see Enhanced NFO)
Here are some demonstration of main usage:
Upload a video:
Specify description and tags:
prismedia --file="yourvideo.mp4" -d "My supa description" -t "tag1,tag2,foo"
Provide a thumbnail:
prismedia --file="yourvideo.mp4" -d "Video with thumbnail" --thumbnail="/path/to/your/thumbnail.jpg"
Publish on Peertube only, while using a channel and a playlist, creating them if they do not exist:
prismedia --file="yourvideo.mp4" --platform=peertube --channel="Cooking recipes" --playlist="Cake recipes" --channelCreate --playlistCreate
Use a NFO file to specify your video options: (See Enhanced NFO for more precise example)
prismedia --file="yourvideo.mp4" --nfo /path/to/your/nfo.txt
Use some credits to show some activity for you apikey so the platform know it is used and would not put your quota to 0 (only Youtube currently).
To prevent Youtube from inactivating your apikey after 90days of inactivity it is recommended to launch this command automatically from a script around once a month. It will mwke a call to use a few credits from your daily quota. On Linux and MacOS, you can use cron, on Windows the "Task Scheduler".
Take a look at all available options with
Since Prismedia v0.9.0, the NFO system has been improved to allow hierarchical loading.
First, if you already used nfo, either with
--nfo or by using
videoname.txt, nothing changes :-)
But you are now able to use a more flexible NFO system, by using priorities. This allows you to set some defaults to avoid recreating a full nfo for each video
Basically, Prismedia will now load options in this order, using the last value found in case of conflict:
nfo.txt < directory_name.txt < video_name.txt < command line NFO < command line argument
You'll find a complete set of samples in the prismedia/samples directory so let's take it as an example:
$ tree Recipes/ Recipes/ ├── cli_nfo.txt ├── nfo.txt ├── samples.txt ├── yourvideo1.mp4 ├── yourvideo1.txt ├── yourvideo1.jpg ├── yourvideo2.mp4 └── yourvideo2.txt
prismedia --file=/path/to/Recipes/yourvideo1.mp4 --nfo=/path/to/Recipes/cli_nfo.txt --cca
samples.txt(from directory name) and erase any previous conflicting options
yourvideo1.txt(from video name) and erase any previous conflicting options
--nfoin command line) and erase any previous conflicting options
yourvideo1.jpgas thumbnail if no other files has been specified in previous NFO
In other word, Prismedia will use option given in cli, then look for option in cli_nfo.txt, then complete with video_name.txt, then directory_name.txt, and finally complete with nfo.txt
It allows to specify more easily default options for an entire set of video, directory, playlist and so on.
Since prismedia v0.10.0, a bunch of special options have been added to force the presence of parameters before uploading. Strict options allow you to force some option to be present when uploading a video. It's useful to be sure you do not forget something when uploading a video, for example if you use multiples NFO. You may force the presence of description, tags, thumbnail, ... All strict option are optionals and are provided only to avoid errors when uploading :-) All strict options can be specified in NFO directly, the only strict option mandatory on cli is --withNFO All strict options are off by default.
Available strict options:
Inspired by peeror (First peertube mirror by Rigelk) and youtube-upload
Thanks to: @LecygneNoir, @Zykino, @meewan, @rigelk 😘