diff --git a/src/App.tsx b/src/App.tsx
index 7ac326f..4c8a4a9 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -70,6 +70,10 @@ export default function App({ children }: { children: React.ReactNode }) {
const EMBED_VIDEO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_video_metadata);
const EMBED_AUDIO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata);
const EMBED_AUDIO_THUMBNAIL = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail);
+ const USE_COOKIES = useSettingsPageStatesStore(state => state.settings.use_cookies);
+ const IMPORT_COOKIES_FROM = useSettingsPageStatesStore(state => state.settings.import_cookies_from);
+ const COOKIES_BROWSER = useSettingsPageStatesStore(state => state.settings.cookies_browser);
+ const COOKIES_FILE = useSettingsPageStatesStore(state => state.settings.cookies_file);
const isErrored = useDownloaderPageStatesStore((state) => state.isErrored);
const isErrorExpected = useDownloaderPageStatesStore((state) => state.isErrorExpected);
@@ -112,6 +116,13 @@ export default function App({ children }: { children: React.ReactNode }) {
if (STRICT_DOWNLOADABILITY_CHECK && !formatId) args.push('--check-all-formats');
if (STRICT_DOWNLOADABILITY_CHECK && formatId) args.push('--check-formats');
if (USE_PROXY && PROXY_URL) args.push('--proxy', PROXY_URL);
+ if (USE_COOKIES) {
+ if (IMPORT_COOKIES_FROM === 'browser' && COOKIES_BROWSER) {
+ args.push('--cookies-from-browser', COOKIES_BROWSER);
+ } else if (IMPORT_COOKIES_FROM === 'file' && COOKIES_FILE) {
+ args.push('--cookies', COOKIES_FILE);
+ }
+ };
const command = Command.sidecar('binaries/yt-dlp', args);
let jsonOutput = '';
@@ -273,6 +284,14 @@ export default function App({ children }: { children: React.ReactNode }) {
args.push('--limit-rate', `${RATE_LIMIT}`);
}
+ if (USE_COOKIES) {
+ if (IMPORT_COOKIES_FROM === 'browser' && COOKIES_BROWSER) {
+ args.push('--cookies-from-browser', COOKIES_BROWSER);
+ } else if (IMPORT_COOKIES_FROM === 'file' && COOKIES_FILE) {
+ args.push('--cookies', COOKIES_FILE);
+ }
+ }
+
console.log('Starting download with args:', args);
const command = Command.sidecar('binaries/yt-dlp', args);
diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx
index dad0b54..be1ec26 100644
--- a/src/pages/settings.tsx
+++ b/src/pages/settings.tsx
@@ -7,7 +7,7 @@ import { Switch } from "@/components/ui/switch";
import { Label } from "@/components/ui/label";
import { Button } from "@/components/ui/button";
import { toast } from "sonner";
-import { ArrowDownToLine, ArrowRight, BrushCleaning, EthernetPort, ExternalLink, FileVideo, Folder, FolderOpen, Info, Loader2, LucideIcon, Monitor, Moon, Radio, RotateCcw, RotateCw, Sun, Terminal, WandSparkles, Wifi, Wrench } from "lucide-react";
+import { ArrowDownToLine, ArrowRight, BrushCleaning, Cookie, EthernetPort, ExternalLink, FileVideo, Folder, FolderOpen, Info, Loader2, LucideIcon, Monitor, Moon, Radio, RotateCcw, RotateCw, Sun, Terminal, WandSparkles, Wifi, Wrench } from "lucide-react";
import { cn } from "@/lib/utils";
import { useEffect } from "react";
import { useTheme } from "@/providers/themeProvider";
@@ -95,6 +95,11 @@ export default function SettingsPage() {
const embedVideoMetadata = useSettingsPageStatesStore(state => state.settings.embed_video_metadata);
const embedAudioMetadata = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata);
const embedAudioThumbnail = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail);
+ const useCookies = useSettingsPageStatesStore(state => state.settings.use_cookies);
+ const importCookiesFrom = useSettingsPageStatesStore(state => state.settings.import_cookies_from);
+ const cookiesBrowser = useSettingsPageStatesStore(state => state.settings.cookies_browser);
+ const cookiesFile = useSettingsPageStatesStore(state => state.settings.cookies_file);
+
const websocketPort = useSettingsPageStatesStore(state => state.settings.websocket_port);
const isChangingWebSocketPort = useSettingsPageStatesStore(state => state.isChangingWebSocketPort);
const setIsChangingWebSocketPort = useSettingsPageStatesStore(state => state.setIsChangingWebSocketPort);
@@ -384,9 +389,14 @@ export default function SettingsPage() {
value="network"
className="data-[state=active]:bg-primary data-[state=active]:text-primary-foreground justify-start px-3 py-1.5 gap-2"
>
Set maximum number of allowed parallel downloads
@@ -432,7 +442,7 @@ export default function SettingsPage() {Choose app interface theme
@@ -455,7 +465,7 @@ export default function SettingsPage() {Set default download folder (directory)
@@ -515,7 +525,7 @@ export default function SettingsPage() {Choose in which format the final video file will be saved
@@ -580,7 +590,7 @@ export default function SettingsPage() { />Wheather to embed metadata in video/audio files (info, chapters)
@@ -611,7 +621,7 @@ export default function SettingsPage() { />Use proxy for downloads, Unblocks blocked sites in your region (download speed may affect, some sites may not work)
@@ -693,6 +703,93 @@ export default function SettingsPage() {Use cookies to access exclusive/private (login-protected) contents from sites (use wisely, over-use can even block/ban your account)
+