Skip to content
Snippets Groups Projects
Commit 3ee5b7f4 authored by Kelvin's avatar Kelvin
Browse files

Merge branch 'master' of gitlab.futo.org:videostreaming/plugins/youtube

parents de038eb8 15d3391a
No related branches found
No related tags found
No related merge requests found
stages:
- deploy_unstable
- deploy
deploy:
......@@ -7,3 +8,12 @@ deploy:
- sh deploy.sh
only:
- master
when: manual
deploy_unstable:
stage: deploy_unstable
script:
- sh deploy_unstable.sh
only:
- master
when: manual
......@@ -8,7 +8,7 @@
"repositoryUrl": "https://futo.org",
"scriptUrl": "./YoutubeScript.js",
"version": 218,
"version": 231,
"iconUrl": "./youtube.png",
"id": "35ae969a-a7db-11ed-afa1-0242ac120002",
......@@ -36,7 +36,8 @@
"google.com",
"returnyoutubedislikeapi.com",
"sponsor.ajay.app",
".googlevideo.com"
".googlevideo.com",
"jnn-pa.googleapis.com"
],
"settings": [
......@@ -70,6 +71,14 @@
"type": "Boolean",
"default": "false"
},
{
"variable": "channelRssOnly",
"name": "Only Use Channel RSS Feeds (Inferior)",
"description": "Exclusively use channel RSS feeds for channel content, may result in inferior results, and only recent videos. But may be faster and reduce rate limiting.",
"type": "Boolean",
"default": "false",
"warningDialog": "Using RSS feeds will have inferior results, and may add shorts in the channel videos and subscriptions.\n\nOld videos may also be unavailable."
},
{
"variable": "allowAgeRestricted",
"name": "Allow Age Restricted",
......@@ -91,6 +100,13 @@
"type": "Boolean",
"default": "false"
},
{
"variable": "useAggressiveUMPRecovery",
"name": "Use Aggressive UMP Recovery",
"description": "This feature allows UMP to refetch the entire page to recover from ip changes and such.",
"type": "Boolean",
"default": "true"
},
{
"variable": "showVerboseToasts",
"name": "Show Verbose Messages",
......@@ -202,12 +218,34 @@
"description": "These are settings not intended for most users, but may help development or power users.",
"type": "Header"
},
{
"variable": "allow_av1",
"name": "Allow AV1",
"description": "Adds AV1 option when available, MAY NOT BE SUPPORTED YET!",
"type": "Boolean",
"default": "false",
"warningDialog": "AV1 support might not work yet, this allows you to return the stream even if its not supported (for testing)"
},
{
"variable": "notify_cipher",
"name": "Show Cipher every Video",
"description": "Shows a toast with the cipher when loading a video",
"type": "Boolean",
"default": "false"
},
{
"variable": "notify_bg",
"name": "Show every new Botguard Token",
"description": "Shows a toast with the botguard token used changed",
"type": "Boolean",
"default": "false"
},
{
"variable": "notify_ump_recovery",
"name": "Show every time UMP disconnects",
"description": "Shows a toast whenever UMP goes into a reconnection mode",
"type": "Boolean",
"default": "false"
}
],
......@@ -233,5 +271,14 @@
},
"supportedClaimTypes": [2],
"primaryClaimFieldType": 1
"primaryClaimFieldType": 1,
"changelog": {
"227": [
"UMP MP4 support (fixes no audio or only 360p for older videos)",
"UMP Disconnect toasts now optional",
"Opt-in AV1 support"
]
}
}
This diff is collapsed.
{
"name": "Youtube (Unstable)",
"description": "One of the biggest video platforms owned by Google",
"author": "FUTO",
"authorUrl": "https://futo.org",
"platformUrl": "https://youtube.com",
"sourceUrl": "https://plugins.grayjay.app/YoutubeUnstable/YoutubeConfig.json",
"repositoryUrl": "https://futo.org",
"scriptUrl": "./YoutubeScript.js",
"version": 231,
"iconUrl": "./youtube.png",
"id": "35ae969a-a7db-11ed-afa1-0242ac120003",
"scriptSignature": "",
"scriptPublicKey": "",
"packages": ["Http", "Utilities", "DOMParser"],
"subscriptionRateLimit": 140,
"reduceFunctionsInLimitedVersion": true,
"allowEval": false,
"allowUrls": [
"youtube.com",
"m.youtube.com",
"www.youtube.com",
"youtu.be",
"www.youtu.be",
"m.youtu.be",
"s.youtube.com",
"consent.youtube.com",
"suggestqueries-clients6.youtube.com",
"youtubei.googleapis.com",
"www.google.com",
"google.com",
"returnyoutubedislikeapi.com",
"sponsor.ajay.app",
".googlevideo.com",
"jnn-pa.googleapis.com"
],
"settings": [
{
"variable": "authChannels",
"name": "Use Login for Channels",
"description": "Use authenticated client for channel (videos) requests. (eg. for member videos)",
"type": "Boolean",
"default": "false",
"warningDialog": "Only enable this if you need it for channel membership content.\n\nTry disabling if you have issues when loading channels."
},
{
"variable": "authDetails",
"name": "Use Login for video details",
"description": "Use authenticated client for video requests. (eg. for member videos)",
"type": "Boolean",
"default": "false",
"warningDialog": "Only enable this if you need it for channel membership content.\n\nTry disabling if you have issues when loading videos and comments."
},
{
"variable": "allowLoginFallback",
"name": "Allow Loginfallback",
"description": "Allow usage of login in case where login required (eg. bot check)",
"type": "Boolean",
"default": "true"
},
{
"variable": "youtubeActivity",
"name": "Provide Youtube Activity",
"description": "Use authenticated client for playback, telling Youtube what you watched.",
"type": "Boolean",
"default": "false"
},
{
"variable": "channelRssOnly",
"name": "Only Use Channel RSS Feeds (Inferior)",
"description": "Exclusively use channel RSS feeds for channel content, may result in inferior results, and only recent videos. But may be faster and reduce rate limiting.",
"type": "Boolean",
"default": "false",
"warningDialog": "Using RSS feeds will have inferior results, and may add shorts in the channel videos and subscriptions.\n\nOld videos may also be unavailable."
},
{
"variable": "allowAgeRestricted",
"name": "Allow Age Restricted",
"description": "Allow watching of age restricted videos",
"type": "Boolean",
"default": "false"
},
{
"variable": "allowControversialRestricted",
"name": "Allow Controversial Restricted",
"description": "Allow watching of controversial restricted videos",
"type": "Boolean",
"default": "false"
},
{
"variable": "useUMP",
"name": "Force Experimental UMP Streams",
"description": "Force usage of experimental implementation of UMP. May be unstable and cost more performance.",
"type": "Boolean",
"default": "false"
},
{
"variable": "useAggressiveUMPRecovery",
"name": "Use Aggressive UMP Recovery",
"description": "This feature allows UMP to refetch the entire page to recover from ip changes and such.",
"type": "Boolean",
"default": "true"
},
{
"variable": "showVerboseToasts",
"name": "Show Verbose Messages",
"description": "Show messages that give more information about what is happening, might be considered annoying for some.",
"type": "Boolean",
"default": "false"
},
{
"variable": "youtubeDislikerHeader",
"name": "Return Youtube Dislike",
"description": "This is a third-party database of video dislikes that combines historic data, crowd-sourced data, and estimations, and may not be accurate.\n\n(Using https://returnyoutubedislike.com)",
"type": "Header"
},
{
"variable": "youtubeDislikes",
"name": "Enable",
"description": "Use Return YoutubeDislike to provide dislikes for videos",
"type": "Boolean",
"default": "false"
},
{
"variable": "sponsorBlockHeader",
"name": "SponsorBlock",
"description": "This is NOT Adblock. SponsorBlock allows you to (automatically) skip in-video sponsor segments.\nIt will harm creators.\n\n(Using https://sponsor.ajay.app)\n\nFUTO respects your decision to use SponsorBlock. But only if you're supporting creators in other ways.",
"type": "Header"
},
{
"variable": "sponsorBlock",
"name": "Enable",
"description": "If enabled support creators in other ways.\nDo not freeload.",
"type": "Boolean",
"default": "false",
"warningDialog": "SponsorBlock will harm creators.\nDo not freeload, support creators in other ways."
},
{
"variable": "sponsorBlockNoVotes",
"name": "Allow No Vote Segments",
"description": "Allow segments without votes, this may cause questionable video skips.",
"type": "Boolean",
"default": "false",
"dependency": "sponsorBlock"
},
{
"variable": "sponsorBlockCat_Sponsor",
"name": "Skip Sponsors",
"description": "Skip segments labeled as sponsors",
"type": "Dropdown",
"default": "1",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Intro",
"name": "Skip Intros",
"description": "Skip segments labeled as intros",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Outro",
"name": "Skip Outros",
"description": "Skip segments labeled as outros",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Self",
"name": "Skip Self-Promos",
"description": "Skip segments labeled as self-promos",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Offtopic",
"name": "Skip Music-Offtopic",
"description": "Skip segments labeled as music-offtopic",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Preview",
"name": "Skip Preview",
"description": "Skip segments labeled as previews",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "sponsorBlockCat_Filler",
"name": "Skip Fillers",
"description": "Skip segments labeled as fillers",
"type": "Dropdown",
"default": "0",
"dependency": "sponsorBlock",
"options": ["No skip", "Manual", "Automatic"]
},
{
"variable": "advanced",
"name": "Advanced",
"description": "These are settings not intended for most users, but may help development or power users.",
"type": "Header"
},
{
"variable": "allow_av1",
"name": "Allow AV1",
"description": "Adds AV1 option when available, MAY NOT BE SUPPORTED YET!",
"type": "Boolean",
"default": "false",
"warningDialog": "AV1 support might not work yet, this allows you to return the stream even if its not supported (for testing)"
},
{
"variable": "notify_cipher",
"name": "Show Cipher every Video",
"description": "Shows a toast with the cipher when loading a video",
"type": "Boolean",
"default": "false"
},
{
"variable": "notify_bg",
"name": "Show every new Botguard Token",
"description": "Shows a toast with the botguard token used changed",
"type": "Boolean",
"default": "false"
},
{
"variable": "notify_ump_recovery",
"name": "Show every time UMP disconnects",
"description": "Shows a toast whenever UMP goes into a reconnection mode",
"type": "Boolean",
"default": "false"
}
],
"developerSubmitUrl": "https://dev.grayjay.app/api/Dev/Submit",
"captcha": {
"userAgent": "Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.153 Mobile Safari/537.36",
"captchaUrl": null,
"cookiesToFind": ["GOOGLE_ABUSE_EXEMPTION"]
},
"authentication": {
"userAgent": "Mozilla/5.0 (Linux; Android 12) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.230 Mobile Safari/537.36",
"completionUrl": "https://m.youtube.com/youtubei/v1/guide?*",
"loginUrl": "https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3Dhttps%253A%252F%252Fwww.youtube.com%252Fchannel_switcher&hl=en&ec=65620",
"headersToFind": ["authorization"],
"domainHeadersToFind": {
".youtube.com": ["authorization"]
},
"cookiesToFind": ["SIDCC"],
"cookiesExclOthers": false,
"loginWarning": "You must select a profile after login for authentication to complete."
},
"supportedClaimTypes": [2],
"primaryClaimFieldType": 1
}
#!/bin/sh
DOCUMENT_ROOT=/var/www/sources
# Take site offline
echo "Taking site offline..."
touch $DOCUMENT_ROOT/maintenance.file
# Swap over the content
echo "Deploying content..."
mkdir -p $DOCUMENT_ROOT/YoutubeUnstable
cp youtubeAlt.png $DOCUMENT_ROOT/YoutubeUnstable/youtube.png
cp YoutubeUnstableConfig.json $DOCUMENT_ROOT/YoutubeUnstable/YoutubeConfig.json
cp YoutubeScript.js $DOCUMENT_ROOT/YoutubeUnstable
sh sign.sh $DOCUMENT_ROOT/YoutubeUnstable/YoutubeScript.js $DOCUMENT_ROOT/YoutubeUnstable/YoutubeConfig.json
# Notify Cloudflare to wipe the CDN cache
echo "Purging Cloudflare cache for zone $CLOUDFLARE_ZONE_ID..."
curl -X POST "https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/purge_cache" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"files":["https://plugins.grayjay.app/YoutubeUnstable/youtube.png", "https://plugins.grayjay.app/YoutubeUnstable/YoutubeConfig.json", "https://plugins.grayjay.app/YoutubeUnstable/YoutubeScript.js"]}'
# Take site back online
echo "Bringing site back online..."
rm $DOCUMENT_ROOT/maintenance.file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment