#!name = YouTube去广告 #!desc = 按功能拆分的 YouTube App 广告处理:固定启用播放器广告协商清理、Onesie 片头广告请求标志清理、首页/推荐/搜索赞助卡片和 Shorts 广告清理;提供后台播放、隐藏首页 Shorts、日志工具三个开关及手动播放地区选择;日志默认仅采集媒体响应头,控制接口保留脱敏开发结构;可选完整媒体采样会增加等待。完整采样选择需 Loon Build 983+。需开启 MitM 并信任证书;不阻断 googlevideo 媒体。 #!icon = https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/assets/youtube.png #!homepage = https://github.com/teaoea/shell/blob/main/loon/YouTube/README.md #!tag = YouTube,去广告,开发日志 [Argument] background_playback = switch,false,tag=后台播放,desc=开启后允许普通视频在切换 App 或锁屏后继续播放音频;直播和受限内容仍由 YouTube 决定 playback_region = select,"original","CN","HK","TW","US","JP","KR","SG","GB","DE","RU",tag=播放请求地区,desc=original 保持原地区;CN 中国大陆;仅修改客户端 gl 参数,不改变出口 IP,去广告效果待验证 hide_home_shorts = switch,false,tag=隐藏首页 Shorts,desc=开启后移除首页 Shorts 推荐区;保留底部 Shorts 入口和其他页面 log_enabled = switch,false,tag=日志工具,desc=保存全链路脱敏记录;媒体默认只记响应头;完整采样可能增加等待;统一下载一个 .log 文件 media_capture_mode = select,"headers","full",tag=媒体采样方式,desc=headers 不等待媒体正文,适合排查播放等待;full 读取初始化和 UMP 完整响应用于开发分析,可能增加等待,需 Loon Build 983+ log_level = select,"info","debug","warn","error",tag=日志保存级别,desc=info 保存完整脱敏链路;error 只保存错误;debug 保留调试级别;warn 保存警告和错误 capture_budget = select,"32","16","64",tag=日志容量 MB,desc=达到上限停止记录,保留已有样本;导出后再清空 [Rule] # 促使 API 与播放协商从 QUIC 回退到可被 MitM/脚本检查的 TCP;不拒绝媒体正文。 AND,((DOMAIN,youtubei.googleapis.com),(PROTOCOL,UDP),(DEST-PORT,443)),REJECT AND,((DOMAIN,youtubei-att.googleapis.com),(PROTOCOL,UDP),(DEST-PORT,443)),REJECT # 按 QUIC 协议匹配 googlevideo 域名及其子域;UDP/443 保留为回退兜底。 AND,((DOMAIN-SUFFIX,googlevideo.com),(PROTOCOL,QUIC)),REJECT AND,((DOMAIN-SUFFIX,googlevideo.com),(PROTOCOL,UDP),(DEST-PORT,443)),REJECT [Rewrite] # 功能:清除媒体源的替代连接提示,减少 QUIC 被拒绝后再次尝试的机会;只处理响应头。 # 更新时间:2026-10-05;实际启动延迟仍需设备验证,客户端可能使用其他 HTTP/3 发现方式。 ^https://(?:[\w-]+\.)*googlevideo\.com(?::443)?/ response-header-replace Alt-Svc clear [Script] http-request ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/(?:browse|next|search|reel\/reel_watch_sequence)(?:\?[^#]*)?$|^https:\/\/[\w-]+\.googlevideo\.com\/videoplayback\?[^#]*$|^http:\/\/youtube-logs\.invalid(?::80)?(?:\/[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeLogger.js,requires-body=false,timeout=10,enable={log_enabled},argument=[{log_enabled},{log_level},{capture_budget},{background_playback},{media_capture_mode}],tag=YouTube 日志记录与导出 http-request ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.)?youtube\.com)\/youtubei\/v1\/log_event(?:\?[^#]*)?$|^https:\/\/[\w-]+\.googlevideo\.com\/initplayback(?:\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeConfig.js,requires-body=true,binary-body-mode=true,timeout=10,argument=[{log_enabled},{log_level},{capture_budget},{playback_region}],tag=YouTube 配置与片头广告请求处理 # 完整采样需在正文接收前选定;同一响应只执行第一条命中的脚本。默认响应头入口不传 full,避免误读正文。 response if ${url} ~= /^https:\/\/[\w-]+\.googlevideo\.com\/(?:videoplayback|initplayback)(?:\?[^#]*)?$/i && ${log_enabled} == true && ${media_capture_mode} == "full" then script("https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeLogger.js", {${log_enabled}, ${log_level}, ${capture_budget}, ${media_capture_mode}}) with requires_body=true, binary_body_mode=true, timeout=30, tag="YouTube 完整媒体开发采样" http-response ^https:\/\/[\w-]+\.googlevideo\.com\/(?:videoplayback|initplayback)(?:\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeLogger.js,requires-body=false,timeout=10,enable={log_enabled},argument=[{log_enabled},{log_level},{capture_budget}],tag=YouTube 日志媒体响应记录 http-response ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.)?youtube\.com)\/youtubei\/v1\/(?:config|log_event)(?:\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeConfig.js,requires-body=true,binary-body-mode=true,timeout=10,argument=[{log_enabled},{log_level},{capture_budget}],tag=YouTube Onesie 配置缓存 http-request ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/(?:player|get_watch)(?:\?[^#]*)?$|^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/player\/ad_break(?:\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubePlayback.js,requires-body=true,binary-body-mode=true,timeout=10,argument=[{log_enabled},{log_level},{capture_budget},{playback_region}],tag=YouTube 播放请求与广告配置处理 http-response ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/(browse|next|search)(\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubeFeed.js,requires-body=true,binary-body-mode=true,timeout=10,argument=[{log_enabled},{log_level},{capture_budget},{hide_home_shorts}],tag=YouTube 信息流广告与首页 Shorts 处理 http-response ^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/(player|get_watch)(\?[^#]*)?$|^https:\/\/(?:youtubei(?:-att)?\.googleapis\.com|(?:www\.|m\.|music\.)?youtube\.com)\/youtubei\/v1\/reel\/reel_watch_sequence(?:\?[^#]*)?$ script-path=https://raw.githubusercontent.com/teaoea/shell/main/loon/YouTube/YouTubePlayback.js,requires-body=true,binary-body-mode=true,timeout=10,argument=[{log_enabled},{log_level},{capture_budget},{background_playback}],tag=YouTube 播放响应与后台播放 [Mitm] hostname = youtubei.googleapis.com, youtubei-att.googleapis.com, youtube.com, www.youtube.com, m.youtube.com, music.youtube.com, *.googlevideo.com # 日志关闭时初始化和普通媒体响应均无正文采样脚本;保留请求侧广告清理。 # googlevideo 的 UDP 仅回退到 TCP,媒体请求仍正常放行。