# batchtube-windows.spec # PyInstaller spec for Windows single-file EXE # Run from backend/ directory: pyinstaller batchtube-windows.spec --clean # Output: dist/BatchTube.exe from PyInstaller.utils.hooks import collect_all block_cipher = None datas, binaries, hiddenimports = [], [], [] for pkg in ['yt_dlp','uvicorn','fastapi','starlette','anyio','sse_starlette','youtube_transcript_api','openai','pydantic']: d,b,h = collect_all(pkg) datas+=d; binaries+=b; hiddenimports+=h datas += [('web','backend/web')] hiddenimports += [ 'uvicorn.logging','uvicorn.loops','uvicorn.loops.auto','uvicorn.loops.asyncio', 'uvicorn.protocols','uvicorn.protocols.http','uvicorn.protocols.http.auto', 'uvicorn.protocols.http.h11_impl','uvicorn.protocols.http.httptools_impl', 'uvicorn.protocols.websockets','uvicorn.protocols.websockets.auto', 'uvicorn.lifespan','uvicorn.lifespan.off','uvicorn.lifespan.on', 'fastapi','fastapi.middleware.cors','starlette.middleware.cors', 'sse_starlette','sse_starlette.sse', 'pydantic','pydantic.v1','pydantic_core','annotated_types','typing_extensions', 'h11','httptools','httpx','anyio','anyio._backends._asyncio','sniffio', 'multipart','python_multipart','aiofiles','aiofiles.os','aiofiles.threadpool', 'yt_dlp','yt_dlp.extractor','yt_dlp.downloader','yt_dlp.postprocessor', 'youtube_transcript_api','youtube_transcript_api._transcripts', 'openai','openai.resources', 'requests','urllib3','certifi','charset_normalizer', 'slugify','python_slugify','tqdm','tqdm.auto', 'sqlite3','_sqlite3','asyncio','concurrent.futures','threading','queue', 'websockets','click','rich','watchfiles','mcp', 'api_server','worker','database','extractors','config', ] a = Analysis( ['batchtube-launcher.py'], pathex=['.'], binaries=binaries, datas=datas, hiddenimports=hiddenimports, hookspath=[], runtime_hooks=[], excludes=['tkinter','matplotlib','numpy','pandas','torch','tensorflow','PyQt5','PyQt6'], cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='BatchTube', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=False, icon='../src-tauri/icons/icon.ico', version='version_info.txt', )