npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

btch-downloader

v6.0.23

Published

A lightweight TypeScript/JavaScript library for downloading media from social media platforms

Downloads

64,243

Readme

Project Prerequisites

To ensure this project runs smoothly, make sure you have the following tools installed.

| Prerequisite | Version | |-------------------|-----------------------------| | Node.js | v20+ | | Package Manager | pnpm 10.18.3+, Yarn 4.10.3+, or Bun 1.3.0+ |

Alternatively, you can include btch-downloader by getting it from npm, downloading it from GitHub releases or by including it via unpkg or another JavaScript CDN, like jsDelivr.

<!-- unpkg : use the latest version of btch-downloader -->
<script src="https://unpkg.com/btch-downloader/dist/browser/index.min.js"></script>

<!-- unpkg : use a specific version of btch-downloader (change the version numbers as necessary) -->
<script src="https://unpkg.com/btch-downloader@/dist/browser/index.min.js"></script>

<!-- jsDelivr : use the latest version of btch-downloader -->
<script src="https://cdn.jsdelivr.net/npm/btch-downloader/dist/browser/index.min.js"></script>

<!-- jsDelivr : use a specific version of btch-downloader (change the version numbers as necessary) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/browser/index.min.js"></script>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Playground Test CDN btch-downloader</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background: #f9f9fb;
      color: #222;
      max-width: 900px;
      margin: 40px auto;
      padding: 25px;
    }
    h1 {
      color: #0078ff;
      text-align: center;
    }
    input {
      width: 60%;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 6px;
      font-size: 15px;
    }
    select {
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 6px;
      font-size: 15px;
      margin-right: 10px;
    }
    button {
      padding: 10px 20px;
      border: none;
      border-radius: 6px;
      background: #0078ff;
      color: white;
      cursor: pointer;
    }
    button:hover {
      background: #005ecc;
    }
    pre {
      text-align: left;
      background: #fff;
      border: 1px solid #ddd;
      border-radius: 6px;
      padding: 10px;
      overflow-x: auto;
      white-space: pre-wrap;
    }
    hr {
      margin: 30px 0;
    }
    ul {
      text-align: left;
      background: #fff;
      border-radius: 6px;
      padding: 15px;
      border: 1px solid #ddd;
    }
    li {
      margin-bottom: 6px;
    }
    a {
      color: #0078ff;
      text-decoration: none;
    }
    a:hover {
      text-decoration: underline;
    }
    .info {
      text-align: center;
      margin-top: 10px;
      font-size: 14px;
      color: #555;
    }
  </style>
</head>
<body>
  <h1>Playground</h1>
  <p align="center">A single-page downloader for all supported platforms.</p>

  <div align="center">
    <select id="platformSelect">
      <option value="auto">Auto Detect</option>
      <option value="instagram">Instagram</option>
      <option value="tiktok">TikTok</option>
      <option value="facebook">Facebook</option>
      <option value="twitter">Twitter</option>
      <option value="youtube">YouTube</option>
      <option value="mediafire">MediaFire</option>
      <option value="capcut">CapCut</option>
      <option value="gdrive">Google Drive</option>
      <option value="pinterest">Pinterest</option>
      <option value="douyin">Douyin</option>
      <option value="xiaohongshu">Xiaohongshu</option>
      <option value="snackvideo">SnackVideo</option>
      <option value="cocofun">Cocofun</option>
      <option value="spotify">Spotify</option>
      <option value="yts">YTS</option>
      <option value="soundcloud">SoundCloud</option>
      <option value="threads">Threads</option>
    </select>
    <input id="urlInput" placeholder="Paste any supported URL here..." />
    <button id="downloadBtn">Fetch</button>
  </div>

  <div class="info">
    Developer: <strong>@prm2.0</strong> — 
    <a href="https://github.com/hostinger-bot/btch-downloader/issues" target="_blank">Report Issues</a>
  </div>

  <h3>Result:</h3>
  <pre id="output">No data yet...</pre>

  <hr>
  <h3>Example URLs</h3>
  <ul>
    <li>Instagram: <a href="https://www.instagram.com/p/ByxKbUSnubS/" target="_blank">https://www.instagram.com/p/ByxKbUSnubS/</a></li>
    <li>TikTok: <a href="https://www.tiktok.com/@omagadsus/video/7025456384175017243" target="_blank">https://www.tiktok.com/@omagadsus/video/7025456384175017243</a></li>
    <li>Facebook: <a href="https://www.facebook.com/watch/?v=1393572814172251" target="_blank">https://www.facebook.com/watch/?v=1393572814172251</a></li>
    <li>Twitter: <a href="https://twitter.com/gofoodindonesia/status/1229369819511709697" target="_blank">https://twitter.com/gofoodindonesia/status/1229369819511709697</a></li>
    <li>YouTube: <a href="https://youtu.be/C8mJ8943X80" target="_blank">https://youtu.be/C8mJ8943X80</a></li>
    <li>MediaFire: <a href="https://www.mediafire.com/file/941xczxhn27qbby/GBWA_V12.25FF-By.SamMods-.apk/file" target="_blank">https://www.mediafire.com/file/941xczxhn27qbby/GBWA_V12.25FF-By.SamMods-.apk/file</a></li>
    <li>CapCut: <a href="https://www.capcut.com/template-detail/7299286607478181121" target="_blank">https://www.capcut.com/template-detail/7299286607478181121</a></li>
    <li>Google Drive: <a href="https://drive.google.com/file/d/1thDYWcS5p5FFhzTpTev7RUv0VFnNQyZ4/view" target="_blank">https://drive.google.com/file/d/1thDYWcS5p5FFhzTpTev7RUv0VFnNQyZ4/view</a></li>
    <li>Pinterest: <a href="https://pin.it/4CVodSq" target="_blank">https://pin.it/4CVodSq</a> or query (e.g., "Zhao Lusi")</li>
    <li>Douyin: <a href="https://v.douyin.com/ikq8axJ/" target="_blank">https://v.douyin.com/ikq8axJ/</a></li>
    <li>Xiaohongshu: <a href="http://xhslink.com/o/2jqifpr7GJ5" target="_blank">http://xhslink.com/o/2jqifpr7GJ5</a></li>
    <li>SnackVideo: <a href="https://s.snackvideo.com/p/j9jKr9dR" target="_blank">https://s.snackvideo.com/p/j9jKr9dR</a></li>
    <li>Cocofun: <a href="https://www.icocofun.com/share/post/379250110809" target="_blank">https://www.icocofun.com/share/post/379250110809</a></li>
    <li>Spotify: <a href="https://open.spotify.com/track/3zakx7RAwdkUQlOoQ7SJRt" target="_blank">https://open.spotify.com/track/3zakx7RAwdkUQlOoQ7SJRt</a></li>
    <li>SoundCloud: <a href="https://soundcloud.com/issabella-marchelina/sisa-rasa-mahalini-official-audio?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing" target="_blank">https://soundcloud.com/issabella-marchelina/sisa-rasa-mahalini-official-audio?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing</a></li>
    <li>Threads: <a href="https://www.threads.net/@cindyyuvia/post/C_Nqx3khgkI/?xmt=AQGzpsCvidh8IwIqOvq4Ov05Zd5raANiVdvCujM_pjBa1Q" target="_blank">https://www.threads.net/@cindyyuvia/post/C_Nqx3khgkI/?xmt=AQGzpsCvidh8IwIqOvq4Ov05Zd5raANiVdvCujM_pjBa1Q</a></li>
    <li>YTS: <a href="#" target="_blank">Enter a YTS query (e.g., "movie title 2023")</a></li>
  </ul>

  <!-- Load btch CDN -->
  <script src="https://cdn.jsdelivr.net/npm/btch-downloader/dist/browser/index.min.js"></script>

  <script>
    const output = document.getElementById("output");
    const btn = document.getElementById("downloadBtn");
    const input = document.getElementById("urlInput");
    const platformSelect = document.getElementById("platformSelect");

    const platformPlaceholders = {
      auto: "Paste any supported URL here...",
      instagram: "Paste Instagram URL (e.g., https://www.instagram.com/p/ByxKbUSnubS/)",
      tiktok: "Paste TikTok URL (e.g., https://www.tiktok.com/@user/video/123)",
      facebook: "Paste Facebook URL (e.g., https://www.facebook.com/watch/?v=123)",
      twitter: "Paste Twitter URL (e.g., https://twitter.com/user/status/123)",
      youtube: "Paste YouTube URL (e.g., https://youtu.be/C8mJ8943X80)",
      mediafire: "Paste MediaFire URL (e.g., https://www.mediafire.com/file/123)",
      capcut: "Paste CapCut URL (e.g., https://www.capcut.com/template-detail/123)",
      gdrive: "Paste Google Drive URL (e.g., https://drive.google.com/file/d/123)",
      pinterest: "Paste Pinterest URL (e.g., https://pin.it/4CVodSq)",
      douyin: "Paste Douyin URL (e.g., https://v.douyin.com/ikq8axJ/)",
      xiaohongshu: "Paste Xiaohongshu URL (e.g., https://xhslink.com/o/123)",
      snackvideo: "Paste SnackVideo URL (e.g., https://s.snackvideo.com/p/123)",
      cocofun: "Paste Cocofun URL (e.g., https://www.icocofun.com/share/post/123)",
      spotify: "Paste Spotify URL (e.g., https://open.spotify.com/track/123)",
      soundcloud: "Paste SoundCloud URL (e.g., https://soundcloud.com/xxxxc)",
      threads: "Paste Threads URL (e.g., https://www.threads.net/@user/post/abc123)",
      yts: "Enter YTS query (e.g., 'movie title 2023')"
    };

    const regexMap = {
        instagram: /instagram\.com\/p\//i,
        tiktok: /tiktok\.com/i,
        facebook: /facebook\.com/i,
        twitter: /(twitter|x)\.com/i,
        youtube: /(youtube\.com|youtu\.be)/i,
        mediafire: /mediafire\.com/i,
        capcut: /capcut\.com/i,
        gdrive: /drive\.google\.com/i,
        pinterest: /(pin\.it|pinterest\.com)/i,
        douyin: /douyin\.com/i,
        xiaohongshu: /(xiaohongshu|xhslink)\.com/i,
        snackvideo: /(snackvideo\.com|s\.snackvideo\.com)/i,
        cocofun: /(icocofun|cocofun)\.com/i,
        spotify: /(open\.spotify|play\.spotify|spotify)\.com/i,
        soundcloud: /(soundcloud)\.com/i,
        threads: /(threads)\.net\/@[\w.-]+\/post\/[\w_-]+/i,
      };


    const fnMap = {
      instagram: "igdl",
      tiktok: "ttdl",
      facebook: "fbdown",
      twitter: "twitter",
      youtube: "youtube",
      mediafire: "mediafire",
      capcut: "capcut",
      gdrive: "gdrive",
      pinterest: "pinterest",
      douyin: "douyin",
      xiaohongshu: "xiaohongshu",
      snackvideo: "snackvideo",
      cocofun: "cocofun",
      spotify: "spotify",
      soundcloud: "soundcloud",
      threads: "threads",
      yts: "yts",
    };

    function isValidUrl(string) {
      try {
        new URL(string);
        return true;
      } catch (_) {
        return false;
      }
    }

    function detectPlatform(inputValue, selectedPlatform) {
      if (selectedPlatform !== "auto") {
        return selectedPlatform; // Respect explicit platform selection
      }

      if (isValidUrl(inputValue)) {
        // Check for platform-specific URL patterns
        for (const [name, regex] of Object.entries(regexMap)) {
          if (regex.test(inputValue)) {
            return name;
          }
        }
        // Default to Pinterest for unmatched URLs
        return "pinterest";
      } else {
        // Non-URL inputs default to YTS
        return "yts";
      }
    }

    // Update placeholder when platform changes
    platformSelect.addEventListener("change", () => {
      input.placeholder = platformPlaceholders[platformSelect.value];
      input.value = ""; // Clear input on platform change
    });

    btn.addEventListener("click", async () => {
      const inputValue = input.value.trim();
      if (!inputValue) return alert("Please enter a valid URL or YTS query!");

      output.textContent = "Detecting platform...";

      try {
        const btch = window.btch;
        if (!btch) throw new Error("btch library not loaded.");

        const platform = detectPlatform(inputValue, platformSelect.value);
        const fnName = fnMap[platform];
        const fn = btch[fnName];

        if (!fn) throw new Error(`Downloader function missing for ${platform}`);

        output.textContent = `Detected: ${platform}\nFetching data...`;

        const res = await fn(inputValue);
        output.textContent = JSON.stringify(res, null, 2);
      } catch (err) {
        output.textContent = "Error: " + (err.message || err);
      }
    });
  </script>
</body>
</html>

Demo HTML

Try Demo

Installing

Package manager

Using npm:

npm install btch-downloader

Using yarn:

yarn add btch-downloader

Using pnpm:

pnpm add btch-downloader

Using bun:

bun add btch-downloader

Services

| Service | Link | Status | |:-------------:|:--------------------------------------------------:|:------:| | Documentation | Visit | Online | | Backend | Visit | Online | | API Reference | Visit | Online |

Usage

Instagram

ESM

import { igdl } from 'btch-downloader';

const url = 'https://www.instagram.com/p/ByxKbUSnubS/?utm_source=ig_web_copy_link';
igdl(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { igdl } = require('btch-downloader');

const url = 'https://www.instagram.com/p/ByxKbUSnubS/?utm_source=ig_web_copy_link';
igdl(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

TikTok

ESM

import { ttdl } from 'btch-downloader';

const url = 'https://www.tiktok.com/@omagadsus/video/7025456384175017243?is_from_webapp=1&sender_device=pc&web_id6982004129280116226';
ttdl(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { ttdl } = require('btch-downloader');

const url = 'https://www.tiktok.com/@omagadsus/video/7025456384175017243?is_from_webapp=1&sender_device=pc&web_id6982004129280116226';
ttdl(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Facebook

ESM

import { fbdown } from 'btch-downloader';

const url = 'https://www.facebook.com/watch/?v=1393572814172251';
fbdown(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { fbdown } = require('btch-downloader');

const url = 'https://www.facebook.com/watch/?v=1393572814172251';
fbdown(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Twitter

ESM

import { twitter } from 'btch-downloader';

const url = 'https://twitter.com/gofoodindonesia/status/1229369819511709697';
twitter(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { twitter } = require('btch-downloader');

const url = 'https://twitter.com/gofoodindonesia/status/1229369819511709697';
twitter(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

YouTube

ESM

import { youtube } from 'btch-downloader';

const url = 'https://youtube.com/watch?v=C8mJ8943X80';
youtube(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { youtube } = require('btch-downloader');

const url = 'https://youtube.com/watch?v=C8mJ8943X80';
youtube(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

MediaFire (no longer maintained / 不再维护)

ESM

import { mediafire } from 'btch-downloader';

const url = 'https://www.mediafire.com/file/941xczxhn27qbby/GBWA_V12.25FF-By.SamMods-.apk/file';
mediafire(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { mediafire } = require('btch-downloader');

const url = 'https://www.mediafire.com/file/941xczxhn27qbby/GBWA_V12.25FF-By.SamMods-.apk/file';
mediafire(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Capcut

ESM

import { capcut } from 'btch-downloader';

const url = 'https://www.capcut.com/template-detail/7299286607478181121?template_id=7299286607478181121&share_token=80302b19-8026-4101-81df-2fd9a9cecb9c&enter_from=template_detail®ion=ID&language=in&platform=copy_link&is_copy_link=1';
capcut(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { capcut } = require('btch-downloader');

const url = 'https://www.capcut.com/template-detail/7299286607478181121?template_id=7299286607478181121&share_token=80302b19-8026-4101-81df-2fd9a9cecb9c&enter_from=template_detail®ion=ID&language=in&platform=copy_link&is_copy_link=1';
capcut(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Google Drive

ESM

import { gdrive } from 'btch-downloader';

const url = 'https://drive.google.com/file/d/1thDYWcS5p5FFhzTpTev7RUv0VFnNQyZ4/view?usp=drivesdk';
gdrive(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { gdrive } = require('btch-downloader');

const url = 'https://drive.google.com/file/d/1thDYWcS5p5FFhzTpTev7RUv0VFnNQyZ4/view?usp=drivesdk';
gdrive(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Pinterest

ESM

import { pinterest } from 'btch-downloader';

const url = 'https://pin.it/4CVodSq';
pinterest(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

// Using a search query
pinterest('Zhao Lusi')
  .then(data => console.log(data))
  .catch(err => console.error(err)); // JSON

CJS

const { pinterest } = require('btch-downloader');

const url = 'https://pin.it/4CVodSq';
pinterest(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

// Using a search query
pinterest('Zhao Lusi')
  .then(data => console.log(data))
  .catch(err => console.error(err)); // JSON

AIO

ESM

import { aio } from 'btch-downloader';

const url = 'https://vt.tiktok.com/ZSkGPK9Kj/';
aio(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { aio } = require('btch-downloader');

const url = 'https://vt.tiktok.com/ZSkGPK9Kj/';
aio(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Douyin (抖音)

ESM

import { douyin } from 'btch-downloader';

const url = 'https://v.douyin.com/ikq8axJ/';
douyin(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { douyin } = require('btch-downloader');

const url = 'https://v.douyin.com/ikq8axJ/';
douyin(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Xiaohongshu (小红书)

ESM

import { xiaohongshu } from 'btch-downloader';

const url = 'http://xhslink.com/o/2jqifpr7GJ5';
xiaohongshu(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { xiaohongshu } = require('btch-downloader');

const url = 'http://xhslink.com/o/2jqifpr7GJ5';
xiaohongshu(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Snackvideo

ESM

import { snackvideo } from 'btch-downloader';

const url = 'https://s.snackvideo.com/p/j9jKr9dR';
snackvideo(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { snackvideo } = require('btch-downloader');

const url = 'https://s.snackvideo.com/p/j9jKr9dR';
snackvideo(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Cocofun

ESM

import { cocofun } from 'btch-downloader';

const url = 'https://www.icocofun.com/share/post/379250110809?lang=id&pkg=id&share_to=copy_link&m=81638cf44ba27b2ffa708f3410a4e6c2&d=63cd2733d8d258facd28d44fde5198d4cea826e89af7efc4238ada620140eea3&nt=1';
cocofun(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { cocofun } = require('btch-downloader');

const url = 'https://www.icocofun.com/share/post/379250110809?lang=id&pkg=id&share_to=copy_link&m=81638cf44ba27b2ffa708f3410a4e6c2&d=63cd2733d8d258facd28d44fde5198d4cea826e89af7efc4238ada620140eea3&nt=1';
cocofun(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Spotify

ESM

import { spotify } from 'btch-downloader';

const url = 'https://open.spotify.com/track/3zakx7RAwdkUQlOoQ7SJRt';
spotify(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { spotify } = require('btch-downloader');

const url = 'https://open.spotify.com/track/3zakx7RAwdkUQlOoQ7SJRt';
spotify(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

YT Search

ESM

import { yts } from 'btch-downloader';

const query = 'Somewhere Only We Know';
yts(query).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { yts } = require('btch-downloader');

const query = 'Somewhere Only We Know';
yts(query).then(data => console.log(data)).catch(err => console.error(err)); // JSON

SoundCloud

ESM

import { soundcloud } from 'btch-downloader';

const url = 'https://soundcloud.com/issabella-marchelina/sisa-rasa-mahalini-official-audio?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing';
soundcloud(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { soundcloud } = require('btch-downloader');

const url = 'https://soundcloud.com/issabella-marchelina/sisa-rasa-mahalini-official-audio?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing';
soundcloud(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Threads

ESM

import { threads } from 'btch-downloader';

const url = 'https://www.threads.net/@cindyyuvia/post/C_Nqx3khgkI/?xmt=AQGzpsCvidh8IwIqOvq4Ov05Zd5raANiVdvCujM_pjBa1Q';
threads(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

CJS

const { threads } = require('btch-downloader');

const url = 'https://www.threads.net/@cindyyuvia/post/C_Nqx3khgkI/?xmt=AQGzpsCvidh8IwIqOvq4Ov05Zd5raANiVdvCujM_pjBa1Q';
threads(url).then(data => console.log(data)).catch(err => console.error(err)); // JSON

Important Notes

  1. This downloader can only be used to download media that is public or accessible to the public.
  2. This application is not affiliated with or endorsed by any application.
  3. Ensure you have permission or copyright to download media before using this application.

Contribution and Issue Reporting

If you encounter any issues or wish to contribute to the development of this application, please visit our GitHub repository.

License

btch-downloader is licensed under the MIT License. Please refer to the LICENSE file for more information.