{"_id":"@blagoja/ts-dlp","_rev":"5-6104a243f574f82f5c6f07c01d082d7a","name":"@blagoja/ts-dlp","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@blagoja/ts-dlp","version":"0.1.0","keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"author":{"name":"Blagoja Blazhevski"},"license":"ISC","_id":"@blagoja/ts-dlp@0.1.0","maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"dist":{"shasum":"62a871fe16f748e72d29629c544edfa7d3fb8be1","tarball":"https://registry.npmjs.org/@blagoja/ts-dlp/-/ts-dlp-0.1.0.tgz","fileCount":22,"integrity":"sha512-IQY/drOMICndjKl5KhntebOIvAqFnbfkVbMYO0mGE50LpJilvyrk3ZKFlcZ5LXs1WCkjYM7dLt4U6tKaAq/TVw==","signatures":[{"sig":"MEUCICL3in7K+FbuFro6E0CwSFGJa+kshQ4EwK8FSj+m0xxUAiEAtDY3rxb2+5bb+nb2lChl3r8tgZPeUzYZufxTUuiN6ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12502},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d518e43d1616a13d6fb62359763253307cbfc00c","scripts":{"dev":"tsx src/index.ts","lint":"eslint src","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"blagoja","email":"blagoja@blazhevski.com"},"_npmVersion":"11.12.1","description":"A human readable TypeScript wrapper for yt-dlp","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","jiti":"^2.7.0","eslint":"^10.4.0","typescript":"^6.0.3","@types/node":"^25.9.1","typescript-eslint":"^8.60.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-dlp_0.1.0_1779873739751_0.6758438239730848","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@blagoja/ts-dlp","version":"0.1.1","keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"author":{"name":"Blagoja Blazhevski"},"license":"ISC","_id":"@blagoja/ts-dlp@0.1.1","maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"dist":{"shasum":"9ced38988fc848694a8f776aab60097982e29a72","tarball":"https://registry.npmjs.org/@blagoja/ts-dlp/-/ts-dlp-0.1.1.tgz","fileCount":24,"integrity":"sha512-h6MWFiPYwJFySkbwU6QaRyvbRn7oYTxjDgUc6X7UBlsAEg64P0CDPbLTA0CBilnRhCGBvu8hqyci5FrbKxdF3w==","signatures":[{"sig":"MEUCIEGHCld4RPt+NYcEoR5l6kO79jlhX4duSBh3V8E5DzEYAiEArkwEZFL1GvfjnI3XI7x2I0Lfh2iKgBC3IuOpb+q5UOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23730},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"677660f9f12cd2402563da6c4e1cbe285e10552a","scripts":{"dev":"tsx src/index.ts","lint":"eslint src","build":"tsup src/index.ts --format esm,cjs --dts","prepublishOnly":"npm run build"},"_npmUser":{"name":"blagoja","email":"blagoja@blazhevski.com"},"_npmVersion":"11.12.1","description":"A human readable TypeScript wrapper for yt-dlp","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","jiti":"^2.7.0","tsup":"^8.5.1","eslint":"^10.4.0","typescript":"^6.0.3","@types/node":"^25.9.1","typescript-eslint":"^8.60.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-dlp_0.1.1_1779874662351_0.2988333956616549","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@blagoja/ts-dlp","version":"0.1.2","keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"author":{"name":"Blagoja Blazhevski"},"license":"MIT","_id":"@blagoja/ts-dlp@0.1.2","maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"homepage":"https://github.com/blagojablazhevski/ts-dlp#readme","bugs":{"url":"https://github.com/blagojablazhevski/ts-dlp/issues"},"dist":{"shasum":"c4588c18296ba2f7c035c510e16306b459f7c006","tarball":"https://registry.npmjs.org/@blagoja/ts-dlp/-/ts-dlp-0.1.2.tgz","fileCount":24,"integrity":"sha512-oOldho3Yg82jb0t530tNxxMxNbJQsRLTZTFhAyoUUmdklhbBILfl5UN3qyOr8g15L+387NWt1djxJsDF1EVwtQ==","signatures":[{"sig":"MEQCICujjWREVSGrNeIfYSpEe+vfQ6F4OwXCyN2MujwkwVcVAiAoGEg2jFezGU8OqrBOQCHaJL/on5Y7s36LKXQWVbNr3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32785},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"200768c0a22a6d627e02f01b16d6b7bcaecad09d","scripts":{"dev":"tsx src/index.ts","lint":"eslint src","build":"tsup src/index.ts --format esm,cjs --dts","prepublishOnly":"npm run build"},"_npmUser":{"name":"blagoja","email":"blagoja@blazhevski.com"},"repository":{"url":"git+https://github.com/blagojablazhevski/ts-dlp.git","type":"git"},"_npmVersion":"11.12.1","description":"A human readable TypeScript wrapper for yt-dlp","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","jiti":"^2.7.0","tsup":"^8.5.1","eslint":"^10.4.0","typescript":"^6.0.3","@types/node":"^25.9.1","typescript-eslint":"^8.60.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-dlp_0.1.2_1779881001975_0.06842552647491007","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@blagoja/ts-dlp","version":"0.1.3","keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"author":{"name":"Blagoja Blazhevski"},"license":"MIT","_id":"@blagoja/ts-dlp@0.1.3","maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"homepage":"https://github.com/blagojablazhevski/ts-dlp#readme","bugs":{"url":"https://github.com/blagojablazhevski/ts-dlp/issues"},"dist":{"shasum":"4c8d1bec3bac7b3ba1426b99125db9c9a456b9e0","tarball":"https://registry.npmjs.org/@blagoja/ts-dlp/-/ts-dlp-0.1.3.tgz","fileCount":24,"integrity":"sha512-csxtBP1OiVBM037v2RJ8Ri+OcqmO8lZIzycywwCnY/pz9wUUgf/ARAMbxUVQefiBOE4xXJUSkxgoHz/nmJBQWA==","signatures":[{"sig":"MEUCIA2lu4VoZ5coY4ADwzBSoX6bAO2OaHEoIQST6xij8/J1AiEAiT/rZVPKcW79xZXVbweYOwH/qDsk/Q38+sI6kabIMjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37853},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"891bbbba2f94f6dd8da92c134a9d18615c24a90e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src","build":"tsup src/index.ts --format esm,cjs --dts","prepublishOnly":"npm run build"},"_npmUser":{"name":"blagoja","email":"blagoja@blazhevski.com"},"repository":{"url":"git+https://github.com/blagojablazhevski/ts-dlp.git","type":"git"},"_npmVersion":"11.12.1","description":"A human readable TypeScript wrapper for yt-dlp","directories":{},"_nodeVersion":"22.20.0","dependencies":{"execa":"^9.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","jiti":"^2.7.0","tsup":"^8.5.1","eslint":"^10.4.0","typescript":"^6.0.3","@types/node":"^25.9.1","typescript-eslint":"^8.60.0"},"_npmOperationalInternal":{"tmp":"tmp/ts-dlp_0.1.3_1779889339441_0.3699658487852824","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@blagoja/ts-dlp","version":"0.1.4","description":"A human readable TypeScript wrapper for yt-dlp","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts","require":"./dist/index.cjs"}},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts","dev":"tsx src/index.ts","lint":"eslint src","prepublishOnly":"npm run build","test":"vitest run"},"keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"repository":{"type":"git","url":"git+https://github.com/blagojablazhevski/ts-dlp.git"},"author":{"name":"Blagoja Blazhevski"},"engines":{"node":">=18"},"license":"MIT","type":"module","devDependencies":{"@types/node":"^25.9.1","eslint":"^10.4.0","jiti":"^2.7.0","tsup":"^8.5.1","tsx":"^4.22.3","typescript":"^6.0.3","typescript-eslint":"^8.60.0","vitest":"^4.1.7"},"dependencies":{"execa":"^9.6.1"},"gitHead":"7bd31a4b03855ce6dc71595587c885d02d8f451e","_id":"@blagoja/ts-dlp@0.1.4","bugs":{"url":"https://github.com/blagojablazhevski/ts-dlp/issues"},"homepage":"https://github.com/blagojablazhevski/ts-dlp#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-lHmmRnOdR/kLC0KuUmDOq33aB17g+B+D+gp1HF+mXpCC4s3QWmeVyzP7eoGJo2Fx6K+R92MntUcJ7kf4t4KcjA==","shasum":"03a1d03365606fe0ec5f52c2cc1c9dd224ad1909","tarball":"https://registry.npmjs.org/@blagoja/ts-dlp/-/ts-dlp-0.1.4.tgz","fileCount":6,"unpackedSize":37746,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAfFDRwx4a9alF3qXZqQNsY1Plw7QhxFOTE3d6NeRLveAiEA+NRlBHfBN5a21A2yUTt0HfDOaTUJQIBvJnICsFN4/yQ="}]},"_npmUser":{"name":"blagoja","email":"blagoja@blazhevski.com"},"directories":{},"maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ts-dlp_0.1.4_1779902972662_0.6513495696324552"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-27T09:22:19.645Z","modified":"2026-05-27T17:29:32.905Z","0.1.0":"2026-05-27T09:22:19.905Z","0.1.1":"2026-05-27T09:37:42.493Z","0.1.2":"2026-05-27T11:23:22.127Z","0.1.3":"2026-05-27T13:42:19.589Z","0.1.4":"2026-05-27T17:29:32.791Z"},"bugs":{"url":"https://github.com/blagojablazhevski/ts-dlp/issues"},"author":{"name":"Blagoja Blazhevski"},"license":"MIT","homepage":"https://github.com/blagojablazhevski/ts-dlp#readme","keywords":["yt-dlp","youtube-dl","downloader","wrapper"],"repository":{"type":"git","url":"git+https://github.com/blagojablazhevski/ts-dlp.git"},"description":"A human readable TypeScript wrapper for yt-dlp","maintainers":[{"name":"blagoja","email":"blagoja@blazhevski.com"}],"readme":"<div align=\"center\">\n\n[![ts-dlp](https://i.imgur.com/UX6vDEk_d.webp?maxwidth=760&fidelity=grand)](#readme)\n\n</div>\n\n# ts-dlp\n\nA lightweight, fluent TypeScript wrapper for [yt-dlp](https://github.com/yt-dlp/yt-dlp) made for humans.\n\n`ts-dlp` makes using yt-dlp feel natural in Node.js and TypeScript projects through a chainable, strongly-typed API.\n\n---\n\n## Why ts-dlp?\n\nyt-dlp is extremely powerful, but constructing CLI arguments manually from Node.js can become difficult to maintain and hard to type safely.\n\n`ts-dlp` provides a fluent TypeScript API that keeps you close to native yt-dlp functionality while improving developer experience.\n\n---\n\n## Features\n\n- Fluent builder-style API\n- Fully typed with TypeScript\n- Uses your local yt-dlp installation\n- Promise-based\n- Easy process handling\n- Cross-platform\n\n---\n\n## Current Status\n\n> Early development / proof of concept\n\n---\n\n## Installation\n\n```bash\nnpm install ts-dlp\n```\n\n`ts-dlp` requires a local yt-dlp installation available in your system PATH.\n\n### Install yt-dlp\n\n**Windows**\n\n```bash\nwinget install yt-dlp.yt-dlp\n```\n\n**macOS**\n\n```bash\nbrew install yt-dlp\n```\n\n**Linux**\n\n```bash\npip install -U yt-dlp\n```\n\nOfficial yt-dlp project: [https://github.com/yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp)\n\n---\n\n## Quick Start\n\nInstead of writing:\n\n```bash\nyt-dlp -f \"bestvideo[height<=1080]+bestaudio\" -o \"downloads/%(title)s.%(ext)s\" URL\n```\n\nYou write:\n\n```ts\nimport {download} from \"ts-dlp\";\n\nawait download(url).resolution(\"1080p\").output(\"downloads\").run();\n```\n\n---\n\n## API\n\n```ts\nimport {download} from \"ts-dlp\";\n\nawait download(url)\n\t.resolution(\"1080p\")\n\t.fps(60)\n\t.format(\"mp4\")\n\t.audio(\"aac\")\n\t.output(\"./downloads\")\n\t.filename(({title, ext}) => `${title}.${ext}`)\n\t.run();\n```\n\n### Methods\n\n| Method                | Description                                        |\n| --------------------- | -------------------------------------------------- |\n| `.resolution(res)`    | Max video resolution (e.g. `\"1080p\"`, `\"720p\"`)    |\n| `.format(ext)`        | Preferred video container (e.g. `\"mp4\"`, `\"webm\"`) |\n| `.fps(fps)`           | Max frame rate (e.g. `60`)                         |\n| `.audio(codec?)`      | Audio codec preference (e.g. `\"aac\"`, `\"mp3\"`)     |\n| `.output(dir)`        | Output directory                                   |\n| `.filename(template)` | Filename template string or callback               |\n| `.run()`              | Execute the download                               |\n\n---\n\n## Philosophy\n\n`ts-dlp` aims to stay thin and predictable.\n\nThe project does not attempt to hide yt-dlp or replace its ecosystem. Instead, it focuses on:\n\n- Better TypeScript ergonomics\n- Safer command construction\n- Cleaner process handling\n- Fluent APIs\n\n`ts-dlp` will not try to model every yt-dlp flag as a typed method. Instead, future versions will expose escape hatches for advanced usage:\n\n```ts\n// Planned\nawait download(url)\n\t.customFormat(\"bestvideo[height<=1080][vcodec^=avc]+bestaudio[ext=m4a]\")\n\t.args([\"--no-playlist\", \"--write-subs\"])\n\t.run();\n```\n\n---\n\n## Goals\n\n- Make yt-dlp easier to use from Node.js\n- Avoid manually constructing CLI arguments\n- Provide autocomplete and type safety\n- Keep the wrapper lightweight\n- Stay close to native yt-dlp functionality\n\n---\n\n## Roadmap\n\n### v0.1.0 - Foundation\n\n- [x] Detect yt-dlp installation\n- [x] Execute yt-dlp commands\n- [x] `.download(url)` / `.run()`\n- [x] `.output(path)`\n- [x] `.format(ext)`\n- [x] `.audio(codec?)`\n- [x] `.resolution(res)`\n- [x] `.fps(fps)`\n- [x] `.filename(template)`\n- [x] Error handling\n- [x] Capture stdout/stderr\n- [x] Unit test setup\n\n### v0.2.0 - Metadata & Information\n\n- [ ] `.info(url)` - fetch video metadata\n- [ ] JSON output support\n- [ ] Playlist support\n- [ ] Progress events\n\n### v0.3.0 - Advanced Features\n\n- [ ] Subtitle support\n- [ ] Thumbnail downloads\n- [ ] Playlist filtering\n- [ ] Cookies support\n- [ ] Proxy support\n- [ ] `.customFormat(selector)` escape hatch\n- [ ] `.args(flags[])` escape hatch\n\n### v0.4.0 - Developer Experience\n\n- [ ] Presets\n- [ ] Config file support\n- [ ] Improved documentation\n- [ ] CI/CD pipeline\n- [ ] Automated tests\n\n---\n\n## Non-Goals\n\nAt least for now, `ts-dlp` will NOT:\n\n- Bundle yt-dlp binaries\n- Replace yt-dlp functionality\n- Abstract every yt-dlp flag into typed methods\n- Become a GUI application\n\nThe goal is to remain a lightweight developer wrapper.\n\n---\n\n## Contributing\n\nContributions, suggestions, and issue reports are welcome.\n\nIf you have ideas for the API design or developer experience, feel free to open an issue.\n\nThis project follows [Conventional Commits](https://www.conventionalcommits.org/) and maintains a [CHANGELOG](./CHANGELOG.md).\n\n---\n\n## Disclaimer\n\n`ts-dlp` is a developer wrapper around yt-dlp. Users are responsible for complying with the terms of service and applicable laws of the media sources they access.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}