fix: make clipious and freetube work by adding some made-up metadata

for the most part ok, but there are some (music) videos which won't work
This commit is contained in:
2025-06-28 05:56:05 +02:00
parent 4e066e4b23
commit 6cdae051b5
2 changed files with 17 additions and 7 deletions

View File

@@ -31,7 +31,7 @@ def api_global_catchall(received_request):
except Exception as e: except Exception as e:
ythdd_globals.apiFailedRequests += 1 ythdd_globals.apiFailedRequests += 1
stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:] stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:]
print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:" print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:\n"
+ f"{traceback.format_exc()}") + f"{traceback.format_exc()}")
status, received, data = 500, f"internal server error: call ended in failure: {e}", [] status, received, data = 500, f"internal server error: call ended in failure: {e}", []
if ythdd_globals.config["general"]["debug"]: if ythdd_globals.config["general"]["debug"]:
@@ -56,7 +56,7 @@ def api_global_catchall(received_request):
except Exception as e: except Exception as e:
ythdd_globals.apiFailedRequests += 1 ythdd_globals.apiFailedRequests += 1
stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:] stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:]
print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:" print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:\n"
+ f"{traceback.format_exc()}") + f"{traceback.format_exc()}")
status, received, data = 500, f"internal server error: invidious translation call ended in failure: {e}", [] status, received, data = 500, f"internal server error: invidious translation call ended in failure: {e}", []
if ythdd_globals.config["general"]["debug"]: if ythdd_globals.config["general"]["debug"]:

View File

@@ -32,7 +32,7 @@ def send(status, response):
return Response(json.dumps(response), mimetype='application/json', status=status) return Response(json.dumps(response), mimetype='application/json', status=status)
def notImplemented(data): def notImplemented(data):
return send(501, {'error': f"not recognised/implemented: {'/'.join(data)}"}) return send(501, {'error': f"not recognised/implemented in Invidious TL: {'/'.join(data)}"})
def stats(): def stats():
data_to_send = { data_to_send = {
@@ -253,13 +253,16 @@ def rebuildFormatsFromYtdlpApi(ydata: dict):
if safeTraverse(stream, ["acodec"]) != "none": if safeTraverse(stream, ["acodec"]) != "none":
# audio-only track # audio-only track
type = safeTraverse(stream, ["audio_ext"], default=None) type = safeTraverse(stream, ["audio_ext"], default=None)
fnote = safeTraverse(stream, ["format_note"], default="low")
if type is None: if type is None:
type = "mp4" type = "mp4"
newRow[ "type"] = "audio/" + type newRow[ "type"] = "audio/" + type
newRow[ "audioQuality"] = str(safeTraverse(stream, ["abr"], default=128)) newRow[ "audioQuality"] = fnote
newRow["audioSampleRate"] = str(safeTraverse(stream, ["asr"], default=44100)) newRow["audioSampleRate"] = int(safeTraverse(stream, ["asr"], default="44100"))
newRow[ "audioChannels"] = safeTraverse(stream, ["audio_channels"]) newRow[ "audioChannels"] = int(safeTraverse(stream, ["audio_channels"]))
newRow[ "qualityLabel"] = newRow["audioQuality"] + "kbps" newRow[ "qualityLabel"] = str(safeTraverse(stream, ["abr"], default="?"))
newRow[ "resolution"] = f"{fnote} quality"
newRow[ "size"] = "0x0"
if safeTraverse(stream, ["vcodec"]) != "none": if safeTraverse(stream, ["vcodec"]) != "none":
# either video-only or video+audio # either video-only or video+audio
type = safeTraverse(stream, ["video_ext"], default=None) type = safeTraverse(stream, ["video_ext"], default=None)
@@ -276,6 +279,13 @@ def rebuildFormatsFromYtdlpApi(ydata: dict):
newRow["clen"] = safeTraverse(params, ["clen"], default=safeTraverse(stream, ["filesize"], default="0")) newRow["clen"] = safeTraverse(params, ["clen"], default=safeTraverse(stream, ["filesize"], default="0"))
newRow["lmt"] = safeTraverse(params, ["lmt"], default="0") newRow["lmt"] = safeTraverse(params, ["lmt"], default="0")
newRow[ "projectionType"] = "RECTANGULAR" # clipious requires this to be mentioned explicitly and cannot be nulled
newRow[ "container"] = safeTraverse(stream, ["ext"], default="unknown_container")
newRow[ "encoding"] = safeTraverse(invidious_formats.FORMATS, [int("0" + newRow["itag"].split("-")[0]), "ext"], default="unknown_encoding") # not sure this split is necessary
newRow[ "quality"] = newRow["qualityLabel"]
newRow[ "init"] = "0-1" # dummy values
newRow[ "index"] = "2-3" # dummy values
if vcodec != "none" and acodec != "none": if vcodec != "none" and acodec != "none":
# 360p stream # 360p stream
format_streams.append(newRow.copy()) format_streams.append(newRow.copy())