Skip to content

Commit 70d2803

Browse files
committed
change yt-dlp path
1 parent 0134ad0 commit 70d2803

4 files changed

Lines changed: 95 additions & 33 deletions

File tree

lib/core/binary_manager.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class BinaryManager {
2828
void _initDesktop({bool isPortable = false}) {
2929
if (_kFlatpak) {
3030
_ffmpegPath = 'ffmpeg';
31-
_ytDlpPath = '/app/lib/yt-dlp/yt-dlp';
31+
_ytDlpPath = 'yt-dlp';
3232
return;
3333
}
3434

lib/data/services/youtube_service.dart

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ enum YouTubeQuality {
1313
p1080('1080p', VideoResolution(1080, 1920)),
1414
p720('720p', VideoResolution(720, 1280)),
1515
p480('480p', VideoResolution(480, 854)),
16-
p360('360p', VideoResolution(360, 640)),
17-
audioOnly('Audio only', null);
16+
p360('360p', VideoResolution(360, 640));
1817

1918
final String label;
2019
final VideoResolution? resolution;
@@ -210,7 +209,6 @@ class YouTubeService {
210209
'bestvideo[height<=480]+bestaudio/best[height<=480]',
211210
YouTubeQuality.p360 =>
212211
'bestvideo[height<=360]+bestaudio/best[height<=360]',
213-
YouTubeQuality.audioOnly => 'bestaudio/best',
214212
_ => 'bestvideo+bestaudio/best',
215213
};
216214
}
@@ -251,34 +249,29 @@ class YouTubeService {
251249
yt_explode.StreamInfo streamInfo;
252250
String ext;
253251

254-
if (quality == YouTubeQuality.audioOnly) {
255-
streamInfo = manifest.audioOnly.withHighestBitrate();
256-
ext = 'webm';
257-
} else {
258-
final muxed = manifest.muxed;
259-
if (muxed.isEmpty) {
260-
onLog?.call('[ERR] No muxed streams available');
261-
return null;
262-
}
252+
final muxed = manifest.muxed;
253+
if (muxed.isEmpty) {
254+
onLog?.call('[ERR] No muxed streams available');
255+
return null;
256+
}
263257

264-
yt_explode.MuxedStreamInfo? selected;
265-
if (quality.resolution != null) {
266-
final targetHeight = quality.resolution!.height;
267-
selected = muxed
268-
.where((s) => s.videoResolution.height <= targetHeight)
269-
.fold<yt_explode.MuxedStreamInfo?>(
270-
null,
271-
(best, s) =>
272-
best == null ||
273-
s.videoResolution.height > best.videoResolution.height
274-
? s
275-
: best,
276-
);
277-
}
278-
selected ??= muxed.withHighestBitrate();
279-
streamInfo = selected;
280-
ext = selected.container.name;
258+
yt_explode.MuxedStreamInfo? selected;
259+
if (quality.resolution != null) {
260+
final targetHeight = quality.resolution!.height;
261+
selected = muxed
262+
.where((s) => s.videoResolution.height <= targetHeight)
263+
.fold<yt_explode.MuxedStreamInfo?>(
264+
null,
265+
(best, s) =>
266+
best == null ||
267+
s.videoResolution.height > best.videoResolution.height
268+
? s
269+
: best,
270+
);
281271
}
272+
selected ??= muxed.withHighestBitrate();
273+
streamInfo = selected;
274+
ext = selected.container.name;
282275

283276
// Sanitize filename
284277
final safeTitle = video.title

lib/presentation/screens/sections/source_section.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ class _YtQualityRow extends StatelessWidget {
524524
selected: selected == q,
525525
disabled: disabled,
526526
onTap: disabled ? null : () => onChanged(q),
527-
color: q == YouTubeQuality.audioOnly ? c.purple : c.accent,
527+
color: c.accent,
528528
isGlass: theme.isGlass,
529529
isDark: theme.isDark,
530530
),

linux/xyz.nokarin.FrameExtractor.metainfo.xml

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,77 @@
7777
<release version="1.2.0" date="2026-04-13">
7878
<url type="details">https://github.com/nokarin-dev/FrameExtractor/releases/tag/v1.2.0</url>
7979
<description>
80-
<p>Frame preview with video-bounded scrubber, batch extraction UI,
81-
save-log button, and various bug fixes.</p>
80+
<p>Major feature release with preset system, extraction history, frame preview, and batch extraction.</p>
81+
<ul>
82+
<li>Preset system to save, browse, and apply named extraction presets</li>
83+
<li>Extraction history with one-click open folder and copy path</li>
84+
<li>Frame preview screen with scrubber and set-as-start/end controls</li>
85+
<li>Batch extraction across multiple time ranges in a single run</li>
86+
<li>Live frame count and estimated output size display</li>
87+
<li>Video metadata card showing duration, resolution, FPS, and codec</li>
88+
<li>Drag and drop video files onto the app window</li>
89+
<li>Settings persistence across sessions</li>
90+
<li>Real-time time range validation with inline error messages</li>
91+
<li>Close confirmation dialog when extraction is in progress</li>
92+
</ul>
93+
</description>
94+
</release>
95+
<release version="1.1.3" date="2026-04-02">
96+
<url type="details">https://github.com/nokarin-dev/FrameExtractor/releases/tag/v1.1.3</url>
97+
<description>
98+
<p>Update checker, new application icon, and CI/CD fixes.</p>
99+
<ul>
100+
<li>Added update checker</li>
101+
<li>New FrameExtractor application icon for Windows and Android</li>
102+
<li>Added RPM build support</li>
103+
<li>Fixed AppImage launch failure</li>
104+
<li>Fixed application crash on Android at startup</li>
105+
</ul>
106+
</description>
107+
</release>
108+
<release version="1.1.2" date="2026-03-26">
109+
<url type="details">https://github.com/nokarin-dev/FrameExtractor/releases/tag/v1.1.2</url>
110+
<description>
111+
<p>Style and theme switcher, keyboard shortcuts, and Linux AppImage fix.</p>
112+
<ul>
113+
<li>Classic and Liquid Glass (experimental) style switcher</li>
114+
<li>Dark and Light theme switcher</li>
115+
<li>Keyboard shortcuts: Space (Extract), Esc (Cancel), Ctrl+L (Log), Ctrl+S (Settings)</li>
116+
<li>Log and Settings now appear as dialogs on desktop</li>
117+
<li>Fixed Linux AppImage launch error caused by unexpanded variable in AppRun</li>
118+
</ul>
119+
</description>
120+
</release>
121+
<release version="1.1.1" date="2026-03-22">
122+
<url type="details">https://github.com/nokarin-dev/FrameExtractor/releases/tag/v1.1.1</url>
123+
<description>
124+
<p>Android extraction fixes and UI improvements.</p>
125+
<ul>
126+
<li>Fixed frame extraction on Android with Scoped Storage support</li>
127+
<li>Fixed YouTube download error on Android external storage</li>
128+
<li>Improved SAF URI resolution with fallback to writable app directory</li>
129+
<li>Mouse cursor and text cursor improvements on interactive elements</li>
130+
<li>Hint bar below Extract button explaining required selections</li>
131+
<li>Clear button on video file and output folder rows</li>
132+
<li>Color-coded log lines and log line count badge</li>
133+
<li>Progress card background tinted by current phase</li>
134+
</ul>
135+
</description>
136+
</release>
137+
<release version="1.1.0" date="2026-03-21">
138+
<url type="details">https://github.com/nokarin-dev/FrameExtractor/releases/tag/v1.1.0</url>
139+
<description>
140+
<p>Initial release with local and YouTube extraction.</p>
141+
<ul>
142+
<li>Extract frames from local video files with start/end time control</li>
143+
<li>Extract frames directly from YouTube URLs via yt-dlp</li>
144+
<li>Adjustable FPS (1–60), format (PNG, JPG, WebP, BMP), quality, and scale</li>
145+
<li>Custom filename prefix for extracted frames</li>
146+
<li>Real-time log panel with copy-to-clipboard support</li>
147+
<li>Live progress tracking with percentage, frame count, and ETA</li>
148+
<li>Bundled ffmpeg and yt-dlp — no manual installation needed</li>
149+
<li>Support for Windows, Linux, and Android</li>
150+
</ul>
82151
</description>
83152
</release>
84153
</releases>

0 commit comments

Comments
 (0)