How to Enable Auto-Skip for Shorts in YTLite: A Complete Guide
Enable auto-skip for Shorts in YTLite by toggling "Auto-skip Shorts" in Settings, or programmatically set the autoSkipShorts key to YES using ytlSetBool.
The YTLite tweak for YouTube provides a built-in auto-skip Shorts feature that automatically advances to the next Short when the current video finishes playing. This functionality is implemented through a settings toggle and a runtime hook that monitors playback progress in the Shorts player.
How the Auto-Skip Shorts Feature Works
YTLite's auto-skip mechanism consists of three interconnected components that work together to detect video completion and trigger navigation.
Settings UI Component
The user-facing control lives in Settings.x at line 243, which adds a switch that reads and writes the autoSkipShorts preference key:
// Settings.x – line 243
[self switchWithTitle:@"AutoSkipShorts" key:@"autoSkipShorts"];
The visible label "Auto-skip Shorts" is defined in en.lproj/Localizable.strings at line 285.
Playback Hook Component
The runtime monitoring is implemented in YTLite.x through method swizzling on YTPlayerViewController. The hook intercepts two time-update methods at lines 414-426:
// YTLite.x – YTPlayerViewController hook
- (void)singleVideo:(YTSingleVideoController *)video
currentVideoTimeDidChange:(YTSingleVideoTime *)time {
%orig;
addEndTime(self, video, time);
autoSkipShorts(self, video, time); // ← auto-skip trigger
}
- (void)potentiallyMutatedSingleVideo:(YTSingleVideoController *)video
currentVideoTimeDidChange:(YTSingleVideoTime *)time {
%orig;
addEndTime(self, video, time);
autoSkipShorts(self, video, time); // ← auto-skip trigger
}
Skip Execution Logic
The autoSkipShorts helper function at lines 14-26 in YTLite.x contains the core decision logic:
// YTLite.x – autoSkipShorts implementation
void autoSkipShorts(YTPlayerViewController *self,
YTSingleVideoController *video,
YTSingleVideoTime *time) {
// Check if feature is enabled
if (!ytlBool(@"autoSkipShorts")) return;
// Verify video has reached its end
if (floor(time.time) >= floor(video.totalMediaTime)) {
// Confirm we're in the Shorts player
if ([self.parentViewController isKindOfClass:%c(YTShortsPlayerViewController)]) {
YTShortsPlayerViewController *shortsVC =
(YTShortsPlayerViewController *)self.parentViewController;
// Advance to next Short
if ([shortsVC respondsToSelector:@selector(reelContentViewRequestsAdvanceToNextVideo:)]) {
[shortsVC performSelector:@selector(reelContentViewRequestsAdvanceToNextVideo:)];
}
}
}
}
Methods to Enable Auto-Skip for Shorts in YTLite
Method 1: Toggle in YTLite Settings (Recommended)
The straightforward approach for most users:
- Open the YouTube app with YTLite installed
- Navigate to YTLite → Settings
- Locate the "Auto-skip Shorts" switch
- Toggle it ON
The setting persists across app restarts via NSUserDefaults with the key autoSkipShorts.
Method 2: Programmatic Control via ytlSetBool
For developers building companion tweaks or automation scripts, enable auto-skip for Shorts in YTLite programmatically:
#import "Utils/YTLUserDefaults.h"
// Enable auto-skip Shorts
ytlSetBool(YES, @"autoSkipShorts");
// Verify current state
BOOL isAutoSkipEnabled = ytlBool(@"autoSkipShorts");
NSLog(@"Auto-skip Shorts: %@", isAutoSkipEnabled ? @"ENABLED" : @"DISABLED");
The ytlSetBool and ytlBool helper functions are defined in Utils/YTLUserDefaults.h and Utils/YTLUserDefaults.m, providing a consistent wrapper around NSUserDefaults for all YTLite preferences.
Method 3: Disable Auto-Skip When Needed
To turn off the feature, reverse either method:
Via Settings UI:
- Toggle "Auto-skip Shorts" to OFF
Programmatically:
ytlSetBool(NO, @"autoSkipShorts");
Key Source Files for Auto-Skip Shorts in YTLite
| File | Purpose | Direct Link |
|---|---|---|
YTLite.x |
Core implementation: autoSkipShorts function and YTPlayerViewController hooks |
Lines 14-26, 414-426 |
Settings.x |
UI switch definition for the feature toggle | Line 243 |
Utils/YTLUserDefaults.h / .m |
Preference helper functions ytlBool and ytlSetBool |
YTLUserDefaults.h • YTLUserDefaults.m |
en.lproj/Localizable.strings |
Localized display string "Auto-skip Shorts" | Line 285 |
Summary
- Enable auto-skip for Shorts in YTLite through the Settings toggle or by setting
autoSkipShortstoYESviaytlSetBool - The feature monitors
YTPlayerViewControllertime updates and triggersreelContentViewRequestsAdvanceToNextVideo:onYTShortsPlayerViewControllerwhen videos end - Implementation spans
YTLite.x(core logic),Settings.x(UI), andYTLUserDefaults(preferences) - Disable at any time by toggling off or calling
ytlSetBool(NO, @"autoSkipShorts")
Frequently Asked Questions
How do I know if auto-skip for Shorts is enabled in YTLite?
Check the YTLite → Settings screen for the "Auto-skip Shorts" toggle position. Programmatically, call ytlBool(@"autoSkipShorts") which returns YES when enabled. The setting persists in NSUserDefaults and survives app restarts.
Does auto-skip work for regular YouTube videos or only Shorts?
Auto-skip for Shorts in YTLite only activates for Shorts content. The autoSkipShorts function explicitly checks that the parent view controller is a YTShortsPlayerViewController before calling reelContentViewRequestsAdvanceToNextVideo:. Regular videos in the standard player are unaffected.
Can I enable auto-skip Shorts without opening the YTLite settings?
Yes. Use the ytlSetBool helper from Utils/YTLUserDefaults.h to toggle the feature programmatically. Import the header and call ytlSetBool(YES, @"autoSkipShorts") to enable. This approach works from another tweak, a script, or during development without manual UI interaction.
What happens if I disable auto-skip while watching a Short?
Disabling auto-skip for Shorts in YTLite takes effect immediately. The autoSkipShorts function checks ytlBool(@"autoSkipShorts") at the start of every execution, so the next time the current Short reaches its end, the early return prevents the skip action. The current Short continues to completion without automatic advancement.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →