Spaces:
Running
Running
import os | |
import gradio as gr | |
from yt_dlp import YoutubeDL | |
from pydantic import BaseModel | |
import browser_cookie3 | |
import tempfile | |
class Config(BaseModel): | |
class Config: | |
arbitrary_types_allowed = True | |
def get_instagram_cookies(): | |
""" | |
Get Instagram cookies from the browser | |
""" | |
try: | |
# Try Chrome first | |
cookies = browser_cookie3.chrome(domain_name='.instagram.com') | |
except: | |
try: | |
# Try Firefox if Chrome fails | |
cookies = browser_cookie3.firefox(domain_name='.instagram.com') | |
except: | |
return None | |
# Create a temporary cookie file | |
cookie_file = tempfile.NamedTemporaryFile(delete=False, suffix='.txt') | |
with open(cookie_file.name, 'w') as f: | |
for cookie in cookies: | |
f.write(f'.instagram.com\tTRUE\t/\tFALSE\t{cookie.expires}\t{cookie.name}\t{cookie.value}\n') | |
return cookie_file.name | |
def download_reel_audio(url, output_folder="downloads"): | |
""" | |
Download audio from Instagram reel using yt-dlp with browser cookies | |
""" | |
try: | |
# Ensure output folder exists | |
os.makedirs(output_folder, exist_ok=True) | |
# Get cookies from browser | |
cookie_file = get_instagram_cookies() | |
if not cookie_file: | |
return "Error: Could not get Instagram cookies from browser. Please ensure you're logged into Instagram in Chrome or Firefox.", None | |
# Configure yt-dlp options | |
ydl_opts = { | |
'format': 'bestaudio/best', | |
'outtmpl': os.path.join(output_folder, '%(title)s.%(ext)s'), | |
'postprocessors': [{ | |
'key': 'FFmpegExtractAudio', | |
'preferredcodec': 'mp3', | |
'preferredquality': '192', | |
}], | |
'quiet': True, | |
'no_warnings': True, | |
'cookiefile': cookie_file | |
} | |
# Download the audio | |
with YoutubeDL(ydl_opts) as ydl: | |
info = ydl.extract_info(url, download=True) | |
audio_path = os.path.join(output_folder, f"{info['title']}.mp3") | |
# Clean up cookie file | |
try: | |
os.unlink(cookie_file) | |
except: | |
pass | |
return "Audio downloaded successfully!", audio_path | |
except Exception as e: | |
# Clean up cookie file in case of error | |
try: | |
if cookie_file: | |
os.unlink(cookie_file) | |
except: | |
pass | |
return f"Error downloading audio: {str(e)}", None | |
# Gradio Interface | |
interface = gr.Interface( | |
fn=download_reel_audio, | |
inputs=gr.Textbox( | |
label="Instagram Reel URL", | |
placeholder="Enter the Instagram reel URL here (e.g., https://www.instagram.com/reel/...)" | |
), | |
outputs=[ | |
gr.Textbox(label="Status"), | |
gr.Audio(label="Downloaded Audio") | |
], | |
title="Instagram Reel to Audio Downloader", | |
description=""" | |
Enter the URL of an Instagram reel to download its audio as an MP3 file. | |
Note: You must be logged into Instagram in Chrome or Firefox browser for this to work. | |
""", | |
theme="default" | |
) | |
if __name__ == "__main__": | |
interface.launch() |