Package: prismedia
PrismediaScripting your way to upload videos to peertube and youtube. Works with Python 3.5+.Table of ContentsInstallationFrom pipFrom sourceConfigurationPeertubeYoutubeUsageEnhanced use of NFOStrict check optionsFeaturesCompatibilityInspirationsContributorsInstallation and upgradeFrom pipSimply install withpipinstallprismediaUpgrade withpipinstall--upgradeprismediaFrom sourceGet the source:gitclonehttps://git.lecygnenoir.info/LecygneNoir/prismedia.gitprismediaYou may use pip to install requirements:pip install -r requirements.txtif you want to use the script directly.
(note:requirements are generated viapoetry export -f requirements.txt)Otherwise, you can usepoetry, which create a virtualenv for the project directly
(Or use the existing virtualenv if one is activated)poetryinstallConfigurationGenerate configuration files by runningprismedia-init.Then, edit them to fill your credential as explained below.PeertubeConfiguration is inpeertube_secretfile.
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/localAlternatively, you can setOAUTHLIB_INSECURE_TRANSPORTto 1 if you do not use https (not recommended)YoutubeConfiguration is inyoutube_secret.jsonfile.
Youtube uses combination of oauth and API access to identify.CredentialsThe 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.youtube_credentials.json.
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:Go to theGoogle console.Create project.Side menu: APIs & auth -> APIsTop menu: Enabled API(s): Enable all Youtube APIs.Side menu: APIs & auth -> Credentials.Create a Client ID: Add credentials -> OAuth 2.0 Client ID -> Other -> Name: prismedia1 -> Create -> OKDownload JSON: Under the section "OAuth 2.0 client IDs". Save the file to your local system.Save this JSON as your youtube_secret.json file.UsageSupport only mp4 for cross compatibility between Youtube and Peertube.Note that all options may be specified in a NFO file!(seeEnhanced NFO)Here are some demonstration of main usage:Upload a video:prismedia--file="yourvideo.mp4"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--playlistCreateUse a NFO file to specify your video options:
(SeeEnhanced NFOfor more precise example)prismedia--file="yourvideo.mp4"--nfo/path/to/your/nfo.txtUse 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".prismedia--hearthbeatTake a look at all available options with--help!prismedia--helpEnhanced use of NFOSince Prismedia v0.9.0, the NFO system has been improved to allow hierarchical loading.
First,if you already used nfo, either with--nfoor by usingvideoname.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 videoBasically, 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 argumentYou'll find a complete set of samples in theprismedia/samplesdirectory so let's take it as an example:$treeRecipes/
Recipes/
├──cli_nfo.txt
├──nfo.txt
├──samples.txt
├──yourvideo1.mp4
├──yourvideo1.txt
├──yourvideo1.jpg
├──yourvideo2.mp4
└──yourvideo2.txtBy usingprismedia--file=/path/to/Recipes/yourvideo1.mp4--nfo=/path/to/Recipes/cli_nfo.txt--ccaPrismedia will:look for options innfo.txtlook for options insamples.txt(from directory name) and erase any previous conflicting optionslook for options inyourvideo1.txt(from video name) and erase any previous conflicting optionslook for options incli_nfo.txt(from the--nfoin command line) and erase any previous conflicting optionserase any previous option regarding CCA as it's specified in cli with--ccatakeyourvideo1.jpgas thumbnail if no other files has been specified in previous NFOIn 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.txtIt allows to specify more easily default options for an entire set of video, directory, playlist and so on.Strict check optionsSince 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:--withNFO         Prevent the upload without a NFO, either specified via cli or found in the directory--withThumbnail       Prevent the upload without a thumbnail--withName        Prevent the upload if no name are found--withDescription     Prevent the upload without description--withTags        Prevent the upload without tags--withPlaylist    Prevent the upload if no playlist--withPublishAt    Prevent the upload if no schedule--withPlatform    Prevent the upload if at least one platform is not specified--withCategory    Prevent the upload if no category--withLanguage    Prevent upload if no language--withChannel     Prevent upload if no channelFeaturesYoutube uploadPeertube uploadSupport of videos parameters (description, tags, category, licence, ...)descriptiontags (no more than 30 characters per tag as Peertube does not support it)categorieslicense: cca or not (Youtube only as Peertube uses Attribution by design)privacy (between public, unlisted or private)enabling/disabling comment (Peertube only as Youtube API does not support it)nsfw (Peertube only as Youtube API does not support it)set default languagethumbnailmultiple lines description (seeissue 4)add videos to playlistcreate playlistschedule your video with publishAtcombine channel and playlist (Peertube only as channel is Peertube feature). Seeissue 40for detailed usage.Use a config file (NFO) file to retrieve videos argumentsAllow choosing peertube or youtube upload (to retry a failed upload for example)Usable on Desktop (Linux and/or Windows and/or MacOS)Different schedules on platforms to prepare previewPossibility to force the presence of upload optionsCopy and forget, eg possibility to copy video in a directory, and prismedia uploads itself:Work in progressthanks to @Zykino 🎉 (Discussions inissue 27)A usable graphical interfaceCompatibilityIf you still use python2, use the version 0.7.1 (no more updated)If you use peertube before 1.0.0-beta4, use the version inside tag 1.0.0-beta3InspirationsInspired by peeror (First peertube mirror by Rigelk) andyoutube-uploadContributorsThanks to: @LecygneNoir, @Zykino, @meewan, @rigelk 😘