Compare commits

..

6 Commits

Author SHA1 Message Date
8d9a819346 chore(deps): update dependency vite to v7.2.9 2025-12-01 07:26:47 +00:00
127f56905c fix(album-color-theme): improve theming consistency across UI elements (#4109)
Co-authored-by: 최민우 <chaeminu0711@gmail.com>
2025-12-01 16:25:14 +09:00
8d448c667f chore(i18n): Translated using Weblate (Urdu)
Currently translated at 25.0% (114 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ur/
2025-11-29 08:01:53 +01:00
e00f33eb2d chore(i18n): Translated using Weblate (Slovak)
Currently translated at 84.4% (385 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sk/
2025-11-29 08:01:52 +01:00
8100804ced chore(i18n): Translated using Weblate (Hebrew)
Currently translated at 46.9% (214 of 456 strings)

Translation: pear-devs/pear-desktop/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/he/
2025-11-28 06:02:01 +01:00
4fba3ffd92 fix(downloader): update youtubei.js and remove player_id (#4069) 2025-11-26 21:20:58 +02:00
10 changed files with 176 additions and 115 deletions

View File

@ -45,7 +45,7 @@
}, },
"pnpm": { "pnpm": {
"overrides": { "overrides": {
"vite": "npm:rolldown-vite@7.2.8", "vite": "npm:rolldown-vite@7.2.9",
"node-gyp": "11.4.2", "node-gyp": "11.4.2",
"xml2js": "0.6.2", "xml2js": "0.6.2",
"node-fetch": "3.3.2", "node-fetch": "3.3.2",
@ -134,7 +134,7 @@
"virtua": "0.42.3", "virtua": "0.42.3",
"vudio": "2.1.1", "vudio": "2.1.1",
"x11": "2.3.0", "x11": "2.3.0",
"youtubei.js": "15.0.1", "youtubei.js": "^16.0.1",
"zod": "4.1.5" "zod": "4.1.5"
}, },
"devDependencies": { "devDependencies": {
@ -173,7 +173,7 @@
"typescript": "5.9.2", "typescript": "5.9.2",
"typescript-eslint": "8.43.0", "typescript-eslint": "8.43.0",
"utf-8-validate": "6.0.5", "utf-8-validate": "6.0.5",
"vite": "npm:rolldown-vite@7.2.8", "vite": "npm:rolldown-vite@7.2.9",
"vite-plugin-inspect": "11.3.3", "vite-plugin-inspect": "11.3.3",
"vite-plugin-resolve": "2.5.2", "vite-plugin-resolve": "2.5.2",
"vite-plugin-solid": "2.11.8", "vite-plugin-solid": "2.11.8",

92
pnpm-lock.yaml generated
View File

@ -5,7 +5,7 @@ settings:
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
overrides: overrides:
vite: npm:rolldown-vite@7.2.8 vite: npm:rolldown-vite@7.2.9
node-gyp: 11.4.2 node-gyp: 11.4.2
xml2js: 0.6.2 xml2js: 0.6.2
node-fetch: 3.3.2 node-fetch: 3.3.2
@ -250,8 +250,8 @@ importers:
specifier: 2.3.0 specifier: 2.3.0
version: 2.3.0 version: 2.3.0
youtubei.js: youtubei.js:
specifier: 15.0.1 specifier: ^16.0.1
version: 15.0.1 version: 16.0.1
zod: zod:
specifier: 4.1.5 specifier: 4.1.5
version: 4.1.5 version: 4.1.5
@ -315,7 +315,7 @@ importers:
version: 4.0.0 version: 4.0.0
electron-vite: electron-vite:
specifier: 4.0.0 specifier: 4.0.0
version: 4.0.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)) version: 4.0.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))
eslint: eslint:
specifier: 9.35.0 specifier: 9.35.0
version: 9.35.0 version: 9.35.0
@ -359,17 +359,17 @@ importers:
specifier: 6.0.5 specifier: 6.0.5
version: 6.0.5 version: 6.0.5
vite: vite:
specifier: npm:rolldown-vite@7.2.8 specifier: npm:rolldown-vite@7.2.9
version: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) version: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vite-plugin-inspect: vite-plugin-inspect:
specifier: 11.3.3 specifier: 11.3.3
version: 11.3.3(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)) version: 11.3.3(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))
vite-plugin-resolve: vite-plugin-resolve:
specifier: 2.5.2 specifier: 2.5.2
version: 2.5.2 version: 2.5.2
vite-plugin-solid: vite-plugin-solid:
specifier: 2.11.8 specifier: 2.11.8
version: 2.11.8(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))(solid-js@1.9.9) version: 2.11.8(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))(solid-js@1.9.9)
ws: ws:
specifier: 8.18.3 specifier: 8.18.3
version: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) version: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@ -482,8 +482,8 @@ packages:
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@bufbuild/protobuf@2.6.3': '@bufbuild/protobuf@2.10.0':
resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==}
'@dehoist/romanize-thai@1.0.0': '@dehoist/romanize-thai@1.0.0':
resolution: {integrity: sha512-6SqD4vyZ48otnypLXMh901CeQetoP5ptYOaIr58N6zDqjjoN0bHszMb5d/6AXJJQf8kIvbmSWBeuDrbAWLajPQ==} resolution: {integrity: sha512-6SqD4vyZ48otnypLXMh901CeQetoP5ptYOaIr58N6zDqjjoN0bHszMb5d/6AXJJQf8kIvbmSWBeuDrbAWLajPQ==}
@ -2531,8 +2531,8 @@ packages:
exif-parser@0.1.12: exif-parser@0.1.12:
resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==}
exponential-backoff@3.1.2: exponential-backoff@3.1.3:
resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
extract-zip@2.0.1: extract-zip@2.0.1:
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
@ -3177,9 +3177,6 @@ packages:
resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==}
engines: {node: '>=18'} engines: {node: '>=18'}
jintr@3.3.1:
resolution: {integrity: sha512-nnOzyhf0SLpbWuZ270Omwbj5LcXUkTcZkVnK8/veJXtSZOiATM5gMZMdmzN75FmTyj+NVgrGaPdH12zIJ24oIA==}
jpeg-js@0.4.4: jpeg-js@0.4.4:
resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
@ -3449,6 +3446,10 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
meriyah@6.1.4:
resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==}
engines: {node: '>=18.0.0'}
micromatch@4.0.8: micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
@ -4061,8 +4062,8 @@ packages:
resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
engines: {node: '>=8.0'} engines: {node: '>=8.0'}
rolldown-vite@7.2.8: rolldown-vite@7.2.9:
resolution: {integrity: sha512-8wKihlF6EDF8grimwd7GPOhLkQkSIgj6Hlcp0CXhtO3HAXeUUqhgZmJmn07OF8e4PbTusMX6Yxmy1BptVRZsdw==} resolution: {integrity: sha512-Y+Q1FpIgAkK2RiAdeS1SxcvDsJaru1JUANFo1aiFFtuGCckhltIowoC/JMU740tFZDTJA5vg5CAl1RzHExNR/w==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -4840,8 +4841,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
youtubei.js@15.0.1: youtubei.js@16.0.1:
resolution: {integrity: sha512-2slapqJS5NuXKHvcACEknyVz0AjH/TrXaOhDM0q2twQKa54kCmfj+7B/2nGfd20uzAe29zW1ejk2qOc4ABuGkg==} resolution: {integrity: sha512-3802bCAGkBc2/G5WUTc0l/bO5mPYJbQAHL04d9hE9PnrDHoBUT8MN721Yqt4RCNncAXdHcfee9VdJy3Fhq1r5g==}
zlibjs@0.3.1: zlibjs@0.3.1:
resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==}
@ -4986,7 +4987,7 @@ snapshots:
'@babel/helper-string-parser': 7.27.1 '@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1 '@babel/helper-validator-identifier': 7.27.1
'@bufbuild/protobuf@2.6.3': {} '@bufbuild/protobuf@2.10.0': {}
'@dehoist/romanize-thai@1.0.0': {} '@dehoist/romanize-thai@1.0.0': {}
@ -5056,7 +5057,7 @@ snapshots:
'@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2':
dependencies: dependencies:
env-paths: 2.2.1 env-paths: 2.2.1
exponential-backoff: 3.1.2 exponential-backoff: 3.1.3
glob: 8.1.0 glob: 8.1.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
make-fetch-happen: 10.2.1 make-fetch-happen: 10.2.1
@ -7024,7 +7025,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
electron-vite@4.0.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)): electron-vite@4.0.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)):
dependencies: dependencies:
'@babel/core': 7.28.3 '@babel/core': 7.28.3
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3)
@ -7032,7 +7033,7 @@ snapshots:
esbuild: 0.25.9 esbuild: 0.25.9
magic-string: 0.30.17 magic-string: 0.30.17
picocolors: 1.1.1 picocolors: 1.1.1
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7416,7 +7417,7 @@ snapshots:
exif-parser@0.1.12: {} exif-parser@0.1.12: {}
exponential-backoff@3.1.2: {} exponential-backoff@3.1.3: {}
extract-zip@2.0.1: extract-zip@2.0.1:
dependencies: dependencies:
@ -8113,10 +8114,6 @@ snapshots:
'@jimp/types': 1.6.0 '@jimp/types': 1.6.0
'@jimp/utils': 1.6.0 '@jimp/utils': 1.6.0
jintr@3.3.1:
dependencies:
acorn: 8.15.0
jpeg-js@0.4.4: {} jpeg-js@0.4.4: {}
js-tokens@4.0.0: {} js-tokens@4.0.0: {}
@ -8387,6 +8384,8 @@ snapshots:
merge2@1.4.1: {} merge2@1.4.1: {}
meriyah@6.1.4: {}
micromatch@4.0.8: micromatch@4.0.8:
dependencies: dependencies:
braces: 3.0.3 braces: 3.0.3
@ -8537,7 +8536,7 @@ snapshots:
node-gyp@11.4.2: node-gyp@11.4.2:
dependencies: dependencies:
env-paths: 2.2.1 env-paths: 2.2.1
exponential-backoff: 3.1.2 exponential-backoff: 3.1.3
graceful-fs: 4.2.11 graceful-fs: 4.2.11
make-fetch-happen: 14.0.3 make-fetch-happen: 14.0.3
nopt: 8.1.0 nopt: 8.1.0
@ -8967,7 +8966,7 @@ snapshots:
sprintf-js: 1.1.3 sprintf-js: 1.1.3
optional: true optional: true
rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1): rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1):
dependencies: dependencies:
'@oxc-project/runtime': 0.99.0 '@oxc-project/runtime': 0.99.0
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
@ -9629,17 +9628,17 @@ snapshots:
optionalDependencies: optionalDependencies:
solid-js: 1.9.9 solid-js: 1.9.9
vite-dev-rpc@1.1.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)): vite-dev-rpc@1.1.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)):
dependencies: dependencies:
birpc: 2.5.0 birpc: 2.5.0
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vite-hot-client: 2.1.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)) vite-hot-client: 2.1.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))
vite-hot-client@2.1.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)): vite-hot-client@2.1.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)):
dependencies: dependencies:
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vite-plugin-inspect@11.3.3(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)): vite-plugin-inspect@11.3.3(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)):
dependencies: dependencies:
ansis: 4.1.0 ansis: 4.1.0
debug: 4.4.1 debug: 4.4.1
@ -9649,8 +9648,8 @@ snapshots:
perfect-debounce: 2.0.0 perfect-debounce: 2.0.0
sirv: 3.0.1 sirv: 3.0.1
unplugin-utils: 0.3.0 unplugin-utils: 0.3.0
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vite-dev-rpc: 1.1.0(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)) vite-dev-rpc: 1.1.0(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -9658,7 +9657,7 @@ snapshots:
dependencies: dependencies:
lib-esm: 0.4.2 lib-esm: 0.4.2
vite-plugin-solid@2.11.8(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))(solid-js@1.9.9): vite-plugin-solid@2.11.8(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))(solid-js@1.9.9):
dependencies: dependencies:
'@babel/core': 7.28.3 '@babel/core': 7.28.3
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
@ -9666,14 +9665,14 @@ snapshots:
merge-anything: 5.1.7 merge-anything: 5.1.7
solid-js: 1.9.9 solid-js: 1.9.9
solid-refresh: 0.6.3(solid-js@1.9.9) solid-refresh: 0.6.3(solid-js@1.9.9)
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vitefu: 1.1.1(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)) vitefu: 1.1.1(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vitefu@1.1.1(rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)): vitefu@1.1.1(rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)):
optionalDependencies: optionalDependencies:
vite: rolldown-vite@7.2.8(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1) vite: rolldown-vite@7.2.9(@types/node@24.3.0)(esbuild@0.25.9)(yaml@2.8.1)
vudio@2.1.1(patch_hash=0e06c2ed11c02bdc490c209fa80070e98517c2735c641f5738b6e15d7dc1959d): {} vudio@2.1.1(patch_hash=0e06c2ed11c02bdc490c209fa80070e98517c2735c641f5738b6e15d7dc1959d): {}
@ -9815,11 +9814,10 @@ snapshots:
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
youtubei.js@15.0.1: youtubei.js@16.0.1:
dependencies: dependencies:
'@bufbuild/protobuf': 2.6.3 '@bufbuild/protobuf': 2.10.0
jintr: 3.3.1 meriyah: 6.1.4
undici: 6.21.3
zlibjs@0.3.1: {} zlibjs@0.3.1: {}

View File

@ -237,7 +237,8 @@
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}%"
} }
} },
"enable-seekbar": "Enable seekbar theming"
}, },
"name": "Album Color Theme" "name": "Album Color Theme"
}, },

View File

@ -150,6 +150,11 @@
"visual-tweaks": { "visual-tweaks": {
"label": "תיקונים חזותיים", "label": "תיקונים חזותיים",
"submenu": { "submenu": {
"custom-window-title": {
"prompt": {
"placeholder": "לדוגמה: שולחן כתיבה אגסי"
}
},
"like-buttons": { "like-buttons": {
"default": "ברירת מחדל", "default": "ברירת מחדל",
"force-show": "הפעל בכוח", "force-show": "הפעל בכוח",
@ -201,8 +206,8 @@
"restart": "הפעל מחדש", "restart": "הפעל מחדש",
"show": "הראה חלון", "show": "הראה חלון",
"tooltip": { "tooltip": {
"default": "יוטיוב מיוזיק", "default": "שולחן כתיבה אגסי",
"with-song-info": "יוטיוב מיוזיק: {{artist}} - {{title}}" "with-song-info": "שולחן כתיב אגסי: {{יוצר}} - {{כותרת}}"
} }
} }
}, },
@ -212,7 +217,7 @@
"name": "הגבר מהירות פרסומת" "name": "הגבר מהירות פרסומת"
}, },
"adblocker": { "adblocker": {
"description": "חסום את כל המודעות והמעקב מחוץ לקופסה", "description": "חסום את כל המודעות והמעקבים",
"menu": { "menu": {
"blocker": "חוסם" "blocker": "חוסם"
}, },
@ -244,6 +249,7 @@
} }
}, },
"buffer": { "buffer": {
"label": "חוצץ",
"submenu": { "submenu": {
"buffer": "{{buffer}}" "buffer": "{{buffer}}"
} }
@ -380,6 +386,11 @@
}, },
"templates": { "templates": {
"title": "פתח בחירת כתוביות" "title": "פתח בחירת כתוביות"
},
"toast": {
"caption-changed": "תרגום שונה ל {{שפה}}",
"caption-disabled": "תרגום בוטל",
"no-captions": "אין תרגום זמין לשיר הזה"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -391,9 +402,11 @@
"menu": { "menu": {
"advanced": "מתקדם" "advanced": "מתקדם"
}, },
"name": "התפיידות צלב[בית]",
"prompt": { "prompt": {
"options": { "options": {
"multi-input": { "multi-input": {
"fade-in-duration": "תתפייד בזמן[מילישניות]",
"fade-scaling": { "fade-scaling": {
"linear": "לינארי", "linear": "לינארי",
"logarithmic": "לוגריתמי" "logarithmic": "לוגריתמי"

View File

@ -237,7 +237,8 @@
"submenu": { "submenu": {
"percent": "{{ratio}}%" "percent": "{{ratio}}%"
} }
} },
"enable-seekbar": "재생바 색조 변경 활성화"
}, },
"name": "앨범 컬러 기반 테마" "name": "앨범 컬러 기반 테마"
}, },

View File

@ -462,7 +462,7 @@
"label": "Text stavu", "label": "Text stavu",
"submenu": { "submenu": {
"artist": "Aktuálne si prehráva {artist}", "artist": "Aktuálne si prehráva {artist}",
"pear-desktop": "Aktuálne prehráva Pear Desktop", "pear-desktop": "Počúva Pear Desktop",
"title": "Aktuálne si prehráva {song title}" "title": "Aktuálne si prehráva {song title}"
} }
} }

View File

@ -151,7 +151,9 @@
"label": "بصری تبدیلیاں", "label": "بصری تبدیلیاں",
"submenu": { "submenu": {
"custom-window-title": { "custom-window-title": {
"label": "اپنی مرضی کا ونڈو عنوان",
"prompt": { "prompt": {
"label": "اپنی مرضی کا ونڈو عنوان درج کریں: (بند کرنے کے لیے خالی چھوڑ دیں)",
"placeholder": "مثال: پیئر ڈیسک ٹاپ" "placeholder": "مثال: پیئر ڈیسک ٹاپ"
} }
}, },
@ -219,7 +221,8 @@
"description": "شروغ سے تمام اشتہارات اور ٹریکنگ بلاک کردیں", "description": "شروغ سے تمام اشتہارات اور ٹریکنگ بلاک کردیں",
"menu": { "menu": {
"blocker": "بلاکر" "blocker": "بلاکر"
} },
"name": "ایڈ بلاکر"
} }
} }
} }

View File

@ -10,21 +10,13 @@ const COLOR_KEY = '--ytmusic-album-color';
const DARK_COLOR_KEY = '--ytmusic-album-color-dark'; const DARK_COLOR_KEY = '--ytmusic-album-color-dark';
const RATIO_KEY = '--ytmusic-album-color-ratio'; const RATIO_KEY = '--ytmusic-album-color-ratio';
export default createPlugin< type Config = {
unknown, enabled: boolean;
unknown, ratio: number;
{ enableSeekbar: boolean;
color?: ColorInstance; };
darkColor?: ColorInstance;
playerPage: HTMLElement | null;
navBarBackground: HTMLElement | null;
ytmusicPlayerBar: HTMLElement | null;
playerBarBackground: HTMLElement | null;
sidebarBig: HTMLElement | null;
sidebarSmall: HTMLElement | null;
ytmusicAppLayout: HTMLElement | null;
type Renderer = {
getMixedColor( getMixedColor(
color: string, color: string,
key: string, key: string,
@ -32,19 +24,18 @@ export default createPlugin<
ratioMultiply?: number, ratioMultiply?: number,
): string; ): string;
updateColor(alpha: number): void; updateColor(alpha: number): void;
}, onConfigChange(newConfig: Config): void;
{ };
enabled: boolean;
ratio: number; export default createPlugin({
}
>({
name: () => t('plugins.album-color-theme.name'), name: () => t('plugins.album-color-theme.name'),
description: () => t('plugins.album-color-theme.description'), description: () => t('plugins.album-color-theme.description'),
restartNeeded: false, restartNeeded: false,
config: { config: {
enabled: false, enabled: false,
ratio: 0.5, ratio: 0.5,
}, enableSeekbar: true,
} satisfies Config as Config,
stylesheets: [style], stylesheets: [style],
menu: async ({ getConfig, setConfig }) => { menu: async ({ getConfig, setConfig }) => {
const ratioList = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]; const ratioList = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
@ -68,18 +59,28 @@ export default createPlugin<
}, },
})), })),
}, },
{
label: t('plugins.album-color-theme.menu.enable-seekbar'),
type: 'checkbox',
checked: config.enableSeekbar,
click(item) {
setConfig({ enableSeekbar: item.checked });
},
},
]; ];
}, },
renderer: { renderer: {
playerPage: null, playerPage: null as HTMLElement | null,
navBarBackground: null, navBarBackground: null as HTMLElement | null,
ytmusicPlayerBar: null, ytmusicPlayerBar: null as HTMLElement | null,
playerBarBackground: null, playerBarBackground: null as HTMLElement | null,
sidebarBig: null, sidebarBig: null as HTMLElement | null,
sidebarSmall: null, sidebarSmall: null as HTMLElement | null,
ytmusicAppLayout: null, ytmusicAppLayout: null as HTMLElement | null,
color: null as ColorInstance | null,
darkColor: null as ColorInstance | null,
async start({ getConfig }) { start() {
this.playerPage = document.querySelector<HTMLElement>('#player-page'); this.playerPage = document.querySelector<HTMLElement>('#player-page');
this.navBarBackground = document.querySelector<HTMLElement>( this.navBarBackground = document.querySelector<HTMLElement>(
'#nav-bar-background', '#nav-bar-background',
@ -94,14 +95,11 @@ export default createPlugin<
'#mini-guide-background', '#mini-guide-background',
); );
this.ytmusicAppLayout = document.querySelector<HTMLElement>('#layout'); this.ytmusicAppLayout = document.querySelector<HTMLElement>('#layout');
const config = await getConfig();
document.documentElement.style.setProperty(
RATIO_KEY,
`${~~(config.ratio * 100)}%`,
);
}, },
onPlayerApiReady(playerApi) { async onPlayerApiReady(playerApi, { getConfig }) {
const config = await getConfig();
(this as Renderer).onConfigChange(config);
const fastAverageColor = new FastAverageColor(); const fastAverageColor = new FastAverageColor();
document.addEventListener('videodatachange', async (event) => { document.addEventListener('videodatachange', async (event) => {
@ -152,7 +150,7 @@ export default createPlugin<
alpha = value; alpha = value;
} }
} }
this.updateColor(alpha ?? 1); (this as Renderer).updateColor(alpha ?? 1);
}); });
}, },
onConfigChange(config) { onConfigChange(config) {
@ -160,8 +158,15 @@ export default createPlugin<
RATIO_KEY, RATIO_KEY,
`${~~(config.ratio * 100)}%`, `${~~(config.ratio * 100)}%`,
); );
if (config.enableSeekbar) document.body.classList.add('seekbar-theme');
else document.body.classList.remove('seekbar-theme');
}, },
getMixedColor(color: string, key: string, alpha = 1, ratioMultiply) { getMixedColor(
color: string,
key: string,
alpha = 1,
ratioMultiply?: number,
) {
const keyColor = `rgba(var(${key}), ${alpha})`; const keyColor = `rgba(var(${key}), ${alpha})`;
let colorRatio = `var(${RATIO_KEY}, 50%)`; let colorRatio = `var(${RATIO_KEY}, 50%)`;
@ -207,26 +212,39 @@ export default createPlugin<
'--yt-spec-black-pure-alpha-80': 'rgba(0,0,0,0.8)', '--yt-spec-black-pure-alpha-80': 'rgba(0,0,0,0.8)',
'--yt-spec-black-1-alpha-98': 'rgba(40,40,40,0.98)', '--yt-spec-black-1-alpha-98': 'rgba(40,40,40,0.98)',
'--yt-spec-black-1-alpha-95': 'rgba(40,40,40,0.95)', '--yt-spec-black-1-alpha-95': 'rgba(40,40,40,0.95)',
'--paper-toast-background-color': '#323232',
'--ytmusic-search-background': '#030303',
'--paper-slider-knob-color': '#f03',
'--paper-dialog-background-color': '#212121',
'--paper-progress-active-color-1': '#f03',
'--paper-progress-active-color-2': '#ff2791',
'--yt-spec-inverted-background': '#f3f3f3',
'background': 'rgba(3, 3, 3)',
'--ytmusic-background': 'rgba(3, 3, 3)',
}; };
const colorKeyMap: Record<string, string> = {
'background': DARK_COLOR_KEY,
'--ytmusic-background': DARK_COLOR_KEY,
};
const ratioMap: Record<string, number> = {
'--paper-progress-active-color-1': 1.75,
'--paper-progress-active-color-2': 1.75,
'--yt-spec-inverted-background': 1.75,
};
const getMixedColor = (this as Renderer).getMixedColor.bind(this);
Object.entries(variableMap).map(([variable, color]) => { Object.entries(variableMap).map(([variable, color]) => {
const key = colorKeyMap[variable] ?? COLOR_KEY;
const ratio = ratioMap[variable] ?? undefined;
document.documentElement.style.setProperty( document.documentElement.style.setProperty(
variable, variable,
this.getMixedColor(color, COLOR_KEY, alpha), getMixedColor(color, key, alpha, ratio),
'important', 'important',
); );
}); });
document.body.style.setProperty(
'background',
this.getMixedColor('rgba(3, 3, 3)', DARK_COLOR_KEY, alpha),
'important',
);
document.documentElement.style.setProperty(
'--ytmusic-background',
// #030303
this.getMixedColor('rgba(3, 3, 3)', DARK_COLOR_KEY, alpha),
'important',
);
}, },
}, },
}); });

View File

@ -81,3 +81,14 @@ ytmusic-browse-response[has-background]:not([disable-gradient]) .background-grad
#background.immersive-background.style-scope.ytmusic-browse-response { #background.immersive-background.style-scope.ytmusic-browse-response {
opacity: 0.6; opacity: 0.6;
} }
ytmusic-search-box[is-bauhaus-sidenav-enabled] {
--ytmusic-search-background: var(--ytmusic-color-black3) !important;
}
.seekbar-theme #progress-bar.ytmusic-player-bar {
--paper-slider-active-color: linear-gradient(to right, var(--paper-progress-active-color-1) 80%, var(--paper-progress-active-color-2) 100%) !important;
--paper-slider-knob-color: var(--paper-progress-active-color-1) !important;
--paper-slider-knob-start-color: var(--paper-progress-active-color-2) !important;
}

View File

@ -8,6 +8,7 @@ import {
UniversalCache, UniversalCache,
Utils, Utils,
YTNodes, YTNodes,
Platform,
} from '\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js'; } from '\u0079\u006f\u0075\u0074\u0075\u0062\u0065i.js';
import is from 'electron-is'; import is from 'electron-is';
import filenamify from 'filenamify'; import filenamify from 'filenamify';
@ -57,6 +58,22 @@ const ffmpeg = lazy(async () =>
); );
const ffmpegMutex = new Mutex(); const ffmpegMutex = new Mutex();
Platform.shim.eval = async (data: Types.BuildScriptResult, env: Record<string, Types.VMPrimative>) => {
const properties = [];
if(env.n) {
properties.push(`n: exportedVars.nFunction("${env.n}")`)
}
if (env.sig) {
properties.push(`sig: exportedVars.sigFunction("${env.sig}")`)
}
const code = `${data.output}\nreturn { ${properties.join(', ')} }`;
return new Function(code)();
}
let yt: Innertube; let yt: Innertube;
let win: BrowserWindow; let win: BrowserWindow;
let playingUrl: string; let playingUrl: string;
@ -131,7 +148,6 @@ export const onMainLoad = async ({
yt = await Innertube.create({ yt = await Innertube.create({
cache: new UniversalCache(false), cache: new UniversalCache(false),
player_id: '0004de42',
cookie: await getCookieFromWindow(win), cookie: await getCookieFromWindow(win),
generate_session_locally: true, generate_session_locally: true,
fetch: getNetFetchAsFetch(), fetch: getNetFetchAsFetch(),