Hang on, I’ll ask my bank to give me a small loan of $20 million. I’m sure they will not laugh in my face and tell me to go fuck myself.
Hang on, I’ll ask my bank to give me a small loan of $20 million. I’m sure they will not laugh in my face and tell me to go fuck myself.
I wrote myself a Chrome add-on that adds a context menu entry to play or download links.
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: "processLink",
title: "Download as...",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "720p",
parentId: "processLink",
title: "720p",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "music",
parentId: "processLink",
title: "MP3",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "maxQual",
parentId: "processLink",
title: "Maximum quality video",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "separator1",
parentId: "processLink",
type: "separator",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "piQual",
parentId: "processLink",
title: "30 fps for RPi",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "separator2",
parentId: "processLink",
type: "separator",
contexts: ["link"]
});
chrome.contextMenus.create({
id: "streamLink",
parentId: "processLink",
title: "Stream to VLC...",
contexts: ["link"]
});
});
chrome.contextMenus.onClicked.addListener((info, tab) => {
let linkUrl = info.linkUrl;
if (info.menuItemId === "720p") {
sendLinkToNativeApp(linkUrl, "video720");
} else if (info.menuItemId === "music") {
sendLinkToNativeApp(linkUrl, "music");
} else if (info.menuItemId === "maxQual") {
sendLinkToNativeApp(linkUrl, "videomp4");
} else if (info.menuItemId === "piQual") {
sendLinkToNativeApp(linkUrl, "video720p30");
} else if (info.menuItemId === "streamLink") {
sendLinkToNativeApp(linkUrl, "stream");
}
});
function sendLinkToNativeApp(link, action) {
console.log("Sending link to native app with action:", action, link);
chrome.runtime.sendNativeMessage(
'com.example.ytlink_processor',
{ link: link, action: action },
function(response) {
if (chrome.runtime.lastError) {
console.error("Error:", chrome.runtime.lastError.message);
} else {
console.log("Received response from native app:", response.output);
}
}
);
}
import sys
import subprocess
import json
import struct
def log_to_file(message):
with open("log.txt", "a") as log_file:
log_file.write(message + "\n")
def get_message():
raw_length = sys.stdin.read(4)
if len(raw_length) == 0:
sys.exit(0)
message_length = struct.unpack('I', raw_length)[0]
message = sys.stdin.read(message_length)
return json.loads(message)
def send_message(message_content):
message = json.dumps(message_content)
sys.stdout.write(struct.pack('I', len(message)))
sys.stdout.write(message)
sys.stdout.flush()
def process_link(link, action):
if action == "stream":
cmd = 'yt-dlp --stream "{}" -o - | "D:/Programme/VLC/vlc.exe" -'.format(link)
else:
cmd = 'yt-dlp --{} "{}"'.format(action, link)
result = subprocess.Popen('start cmd /c "{}"'.format(cmd), shell=True)
return result.stdout + result.stderr
if __name__ == "__main__":
message = get_message()
link = message.get("link")
action = message.get("action")
if link and action:
output = process_link(link, action)
send_message({"output": output})
The actions are just aliases for different qualities (old pi, so 720p60 stutters at times), audio extraction, etc.
Awesome, works with VLC as well. Thanks.
TAA, motion blur, depth of field. Why do “technologies” to turn a good looking game into a trash looking game even exist?
Downside is that you’ll have to regularly delete all the videos you’ve downloaded.
You cannot really pollute these platforms any more than they already are imo. The AI slop perfectly resonates with the rest of the garbage there, so it shouldn’t make a difference.