"WFQuickActionSurfaces": [], "WFWorkflowClientVersion": "3607.0.2", "WFWorkflowHasOutputFallback": false, "WFWorkflowHasShortcutInputVariables": true, "WFWorkflowIcon": { "WFWorkflowIconStartColor": -2873601, "WFWorkflowIconGlyphNumber": 59508 }, "WFWorkflowImportQuestions": [], "WFWorkflowInputContentItemClasses": [ "WFURLContentItem" ], "WFWorkflowMinimumClientVersion": 1106, "WFWorkflowMinimumClientVersionString": "1106", "WFWorkflowOutputContentItemClasses": [], "WFWorkflowTypes": [ "ActionExtension" ]
YouTube Download 2025-05-29 v3.3.5 https://routinehub.co/user/gluebyte https://bsky.app/profile/gluebyte.bsky.social


command
:
[rm -f ~OnMyDevice/yt_* ~/Documents/yt_*, echo $APPNAME]
ShowWhenRun
:
false

File
:
{ "fileLocation": { "WFFileLocationType": "LocalStorage", "fileProviderDomainID": "com.apple.FileProvider.LocalStorage", "relativeSubpath": "Documents", "appContainerBundleIdentifier": "AsheKube.app.a-Shell-mini", "crossDeviceItemID": "fp://com.apple.FileProvider.LocalStorage//#AsheKube.app.a-Shell-mini" }, "filename": "Documents", "displayName": "a-Shell" }
File
:
{ "fileLocation": { "WFFileLocationType": "LocalStorage", "fileProviderDomainID": "com.apple.FileProvider.LocalStorage", "relativeSubpath": "Documents", "appContainerBundleIdentifier": "AsheKube.app.a-Shell", "crossDeviceItemID": "fp://com.apple.FileProvider.LocalStorage//#AsheKube.app.a-Shell" }, "filename": "Documents", "displayName": "a-Shell" }
fileName
:
/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist
copyFile
:
true
ShowWhenRun
:
false


ReplaceTextRegularExpression
:
true

codec.includes('AV1') ? ' 📁' :\u{space}


SelectedApp
:
{ "BundleIdentifier": "dk.simonbs.Scriptable", "Name": "Scriptable", "TeamIdentifier": "8NQFWJHC63" }
SelectedApp
:
{ "BundleIdentifier": "com.apple.shortcuts", "Name": "Shortcuts", "TeamIdentifier": "0000000000" }
Input
:
[Shortcut Input]
Workflow
:
{ "workflowIdentifier": "C5D3B224-C4DC-41D1-8571-3C0BCE9EE115", "workflowName": "YouTube Download", "isSelf": true }
AlertActionCancelButtonShown
:
false
MenuPrompt
:
✴️ [mainDict.msg.newversion] ✴️ [Output.version]
MenuItems
:
["[mainDict.gotoweb]", "[mainDict.downloadupdate]", "[mainDict.notnow]"]



ReplaceTextRegularExpression
:
true

script
:
WebView.loadURL('https://consent.youtube.com/ml?continue=https://www.youtube.com/&gl=CH&hl=en&cm=2&pc=yt&src=1&rffu=true')
runInApp
:
true
script
:
await WebView.loadURL('https://www.youtube.com/'); Safari.open('shortcuts:');
runInApp
:
true
Input
:
[Shortcut Input]
Workflow
:
{ "workflowIdentifier": "A617DAF6-0CE3-4CC7-8A0A-352BDCEC35ED", "workflowName": "YouTube Download", "isSelf": true }
AlertActionCancelButtonShown
:
false
AlertActionTitle
:
[mainDict.msg.error]

[Output.user]



[95 live.title] @[95 live.user]
[96 Text][mainDict.msg.recordprompt]
[96 Text][mainDict.msg.postliveprompt]
["[98 record]", "[mainDict.pip]"]

ChooseFromListActionPrompt
:
[102 If Result][84 login status]

ChooseFromListActionPrompt
:
[mainDict.msg.qualityprompt]

MenuPrompt
:
[mainDict.msg.pipprompt]
MenuItems
:
["[mainDict.pip]", "[mainDict.skip]"]
script
:
w = new WebView(); await w.loadHTML('<meta name="color-scheme" content="light dark" /><video width=100% controls autoplay><source src="[95 live.pip]" type="application/x-mpegURL"></video>'); await w.evaluateJavaScript(`v = document.querySelector('video'); v.addEventListener('loadeddata', () => { if (v.readyState >= 2) { setTimeout(() => { v.webkitSetPresentationMode('picture-in-picture') }, 100); setTimeout(() => completion(), 500); setTimeout(() => v.play(), 1000); setTimeout(() => v.play(), 1500); }}); v.addEventListener('ended', () => v.webkitSetPresentationMode('inline'));`, true); w.present();
runInApp
:
true
SelectedApp
:
{ "BundleIdentifier": "AsheKube.app.a-Shell-mini", "Name": "a-Shell mini", "TeamIdentifier": "VG8Z23C8YL" }
cd ~/Documents clear rm -f yt_* echo [mainDict.msg.recstart] echo ffmpeg -v fatal -stats -m3u8_hold_counters 20 -i [107 Dictionary Value] -c copy -y yt_0.mp4 touch yt_done echo [mainDict.msg.recend] echo

command
:
[115 Text]
openWindow
:
open
AlertActionCancelButtonShown
:
false
FileErrorIfNotFound
:
false
File
:
[10 Shell Folder]
File
:
[10 Shell Folder]




video

[144 ytitem.title] @[144 ytitem.user] [144 ytitem.duration] [84 login status]
["[154 always video]", "[155 get video]", "[158 get audio]", "[161 open pip]"]

ChooseFromListActionPrompt
:
[163 Text]


video
video
audio



ContentItemSortProperty
:
Name
ContentItemSortOrder
:
Z to A

ContentItemLimitEnabled
:
true
ContentItemLimitNumber
:
1
ContentItemFilter
:
Name contains mp4 (AVC) 🖼️\u3000

["[191 Files]", m4a → mp3]
["[204 always avc]", "[191 Files]"]

ChooseFromListActionPrompt
:
[mainDict.msg.codecprompt][27 av1prompt]


m4a






ChooseFromListActionPrompt
:
[mainDict.menu.save_avc_to.prompt]

ReplaceTextRegularExpression
:
true







ChooseFromListActionPrompt
:
[mainDict.menu.download_thumbnail.prompt]

ReplaceTextRegularExpression
:
true






ChooseFromListActionPrompt
:
[mainDict.menu.process_captions.prompt]

ReplaceTextRegularExpression
:
true







ContentItemSortProperty
:
Name
ContentItemSortOrder
:
A to Z

ChooseFromListActionPrompt
:
[mainDict.msg.captionprompt]
ChooseFromListActionSelectMultiple
:
true


ChooseFromListActionPrompt
:
[mainDict.menu.media_date.prompt]

ReplaceTextRegularExpression
:
true








Folder
:
[10 Shell Folder]
AskWhereToSave
:
false
SaveFileOverwrite
:
true

mp3
{ "key": "m4a", "codec": "opus -strict -2" }
{ "key": "webm", "codec": "copy" }
{ "key": "m4a", "codec": "copy" }


echo "🌀 [mainDict.msg.audio] ([331 audio as Dictionary.donuts]🍩)";Y1="curl [331 audio as Dictionary.curl] -LSsr ";Y2="rm -f yt_0.audio";\n' n = -(-[331 audio as Dictionary.bytes] // 10000000) for i in range(n): end = min(int(str(i) + "9999999"), [331 audio as Dictionary.bytes]) sh += f"${{Y1}}{i * 10000000}-{end} >> yt_0.audio ;$Y5{';echo -n ' + (str(i + 1) if i % 20 == 19 else spc) if i % 5 == 4 else ''}\nif [ `stat -f%z yt_0.audio` -lt {end} ];then $Y2;$Y3;$Y4;echo;exit;fi;" sh += '\necho;echo;echo 🌀 [mainDict.msg.merge];ffmpeg -v error -stats -i yt_0.video -i yt_0.audio[335 caption] -c:v copy -c:a [330 codec.codec] -y yt_[Repeat Index].[317 ext];touch[301 date] yt_[Repeat Index].[317 ext] yt_[Repeat Index].jpg;rm -f yt_0.*;if [ ! -s yt_[Repeat Index].[317 ext] ];then touch yt_done yt_fail;echo;exit;fi
-c copy

echo 🌀 [mainDict.msg.encode];ffmpeg -v error -stats -i yt_0.audio[341 If Result] [144 ytitem.id3] -y yt_[Repeat Index].[320 new ext];touch[301 date] yt_[Repeat Index].[320 new ext] yt_[Repeat Index].jpg;rm -f yt_0.*;if [ ! -s yt_[Repeat Index].[320 new ext] ];then touch yt_done;yt_fail;echo;exit;fi
SelectedApp
:
{ "BundleIdentifier": "AsheKube.app.a-Shell-mini", "Name": "a-Shell mini", "TeamIdentifier": "VG8Z23C8YL" }

sh = 'cd ~/Documents;clear;Y1="curl [221 media.curl] -LSsr ";Y2="rm -f yt_0.[221 media.curlext]";Y3="echo 🛑☠️🛑";Y4="touch yt_done yt_fail";Y5="echo -n 🍩️";[mainDict.msg.background];echo "🌀 [mainDict.msg.media] ([221 media.donuts]🍩)";\n' spc = '" "' n = -(-[221 media.bytes] // 10000000) for i in range(n): end = min(int(str(i) + "9999999"), [221 media.bytes]) sh += f"${{Y1}}{i * 10000000}-{end} >> yt_0.[221 media.curlext] ;$Y5{';echo -n ' + (str(i + 1) if i % 20 == 19 else spc) if i % 5 == 4 else ''}\nif [ `stat -f%z yt_0.[221 media.curlext]` -lt {end} ];then $Y2;$Y3;$Y4;echo;exit;fi;" sh += '\necho;echo;[343 If Result];touch yt_done;echo' with open("yt_[345 random].dash", "w") as f: f.write(sh)

Folder
:
[10 Shell Folder]
AskWhereToSave
:
false
SaveFileOverwrite
:
true
FileDestinationPath
:
yt_[345 random]
command
:
[hideKeyboard, cd ~/Documents, python yt_[345 random].txt, dash yt_[345 random].dash]
openWindow
:
open
FileErrorIfNotFound
:
false
File
:
[10 Shell Folder]



FileErrorIfNotFound
:
false
File
:
[10 Shell Folder]

FileErrorIfNotFound
:
false
File
:
[10 Shell Folder]

ConditionalActionString
:
[144 ytitem.title]

File
:
[10 Shell Folder]


File
:
[10 Shell Folder]

script
:
let caption = [275 caption] let keys = args.shortcutParameter !Array.isArray(keys) && (keys = [keys]) let output = await Promise.all(keys.map(async k => { let r = new Request(caption[k].url.replace(/&fmt=vtt/, '&fmt=ttml')) let p = await r.loadString() return p.match(/<p begin="[^<]+/g).map((a,i) => (i+1) + '\n' + a.replace('<p begin="','').replace(/\.(\d\d\d)" end="(\d\d:\d\d:\d\d)\.(\d\d\d)".*?>/, ',$1 --> $2,$3\n')).join('\n\n').replace(/<br ?\/?>/g,'\n').replace(/&quot;/g,'"').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&').replace(/&#(\d+);/g, (m,p) => String.fromCharCode(parseInt(p))) })) return {files:output}
parameter
:
[277 caption lang]
ShowWhenRun
:
false





command
:
rm -f ~/Documents/yt_*
openWindow
:
close
ShowWhenRun
:
false
1.0
[0.5, 0.75, 1.0, 1.25, 1.5, 2.0]

ChooseFromListActionPrompt
:
[mainDict.msg.playbackspeed]

script
:
w = new WebView(); await w.loadHTML('<meta name="color-scheme" content="light dark" /><video width=100% controls autoplay><source src="[pip]" type="application/x-mpegURL"></video>'); await w.evaluateJavaScript(`v = document.querySelector('video'); v.playbackRate = [422 If Result]; v.addEventListener('loadeddata', () => { if (v.readyState >= 2) { setTimeout(() => { v.webkitSetPresentationMode('picture-in-picture') }, 100); setTimeout(() => completion(), 500); setTimeout(() => v.play(), 1000); setTimeout(() => v.play(), 1500); }}); v.addEventListener('ended', () => v.webkitSetPresentationMode('inline'));`, true); w.present(); Safari.open('shortcuts:');
runInApp
:
true
AlertActionCancelButtonShown
:
false
AlertActionTitle
:
[mainDict.msg.fail]
0
1
MenuPrompt
:
[mainDict.msg.locationprompt]
MenuItems
:
["[mainDict.onmy][DeviceDetails’s Device Type]", iCloud Drive, iCloud Drive/Shortcuts]



File
:
{ "fileLocation": { "fileProviderDomainID": "com.apple.FileProvider.LocalStorage", "relativeSubpath": "", "WFFileLocationType": "LocalStorage" }, "filename": "File Provider Storage", "displayName": "On My iPad" }
File
:
{ "fileLocation": { "fileProviderDomainID": "com.apple.CloudDocs.MobileDocumentsFileProvider", "relativeSubpath": "com~apple~CloudDocs", "WFFileLocationType": "iCloud" }, "filename": "com~apple~CloudDocs", "displayName": "iCloud Drive" }
File
:
{ "fileLocation": { "relativeSubpath": "", "fileProviderDomainID": "com.apple.CloudDocs.MobileDocumentsFileProvider", "appContainerBundleIdentifier": "com.apple.shortcuts", "WFFileLocationType": "Shortcuts" }, "filename": "Documents", "displayName": "Shortcuts" }

AllowsMultilineText
:
false
AskActionPrompt
:
[462 Dictionary Value]

ReplaceTextRegularExpression
:
true


Folder
:
[460 If Result]
Folder
:
[460 If Result]
AskWhereToSave
:
false
FileDestinationPath
:
[pref.savefolder]

AlertActionCancelButtonShown
:
false


[477 Item from List]



SelectedApp
:
[494 Dictionary Value]
ReplaceTextRegularExpression
:
true

ChooseFromListActionPrompt
:
[mainDict.menu.viewer_app.prompt]


SelectedApp
:
[Ask “ Select App:”]
SelectedApp
:
[501 Dictionary Value]

ChooseFromListActionPrompt
:
[mainDict.menu.viewer_app.prompt]


SelectedApp
:
[510 Dictionary Value]


ChooseFromListActionPrompt
:
[mainDict.menu.open_files_photos.prompt]

ReplaceTextRegularExpression
:
true





File
:
[460 If Result]

SelectedApp
:
{ "BundleIdentifier": "com.apple.DocumentsApp", "Name": "Files", "TeamIdentifier": "0000000000" }
OpenInAppIdentifier
:
com.apple.DocumentsApp
SelectedApp
:
{ "BundleIdentifier": "com.apple.mobileslideshow", "Name": "Photos", "TeamIdentifier": "0000000000" }
script
:
let f = FileManager.local() let p = f.joinPath(f.documentsDirectory(), '[mainDict.filename]') f.writeString(p, JSON.stringify([pref])) Script.complete()
ShowWhenRun
:
false
MenuPrompt
:
[mainDict.msg.menuprompt][84 login status]
MenuItems
:
["[mainDict.contact]", "[mainDict.contact2]", "[mainDict.login]", "[mainDict.settings]", "[mainDict.getlink]"]
script
:
await WebView.loadURL('https://www.youtube.com/'); Safari.open('youtube:');
runInApp
:
true


ChooseFromListActionPrompt
:
[mainDict.msg.settingprompt][557 Dictionary.albumname][557 Dictionary.folderpath][557 Dictionary.viewer_app]

MenuPrompt
:
[562 Dictionary Value]
MenuItems
:
["[mainDict.yes]", "[mainDict.no]"]

script
:
let mainD = [mainDict] let pref = [pref] if ('[558 Chosen Item]' === mainD.resetall) { pref = mainD.defaultpref } else if ('[558 Chosen Item]' === mainD.reset) { delete pref.folderlocation delete pref.savefolder delete pref.album delete pref.viewer_app delete pref.open_files_photos } else { let prefitem = mainD.preflist[[556 Output].menu.indexOf('[558 Chosen Item]') - 2] pref[prefitem.key] = (1 + (pref[prefitem.key] ?? 0)) % ((o = prefitem.options) ? o.length : 2) } let f = FileManager.local() let p = f.joinPath(f.documentsDirectory(), '[mainDict.filename]') f.writeString(p, JSON.stringify(pref)) return pref
ShowWhenRun
:
false



Input
:
[580 Clipboard]
Workflow
:
{ "workflowIdentifier": "5375CB66-6684-457E-AF0C-C027C4C82851", "workflowName": "YouTube Download", "isSelf": true }
AlertActionCancelButtonShown
:
false
AlertActionTitle
:
[mainDict.msg.noclipboard]