Code Monkey home page Code Monkey logo

youtube-downloader's Introduction


Logo

YouTube Downloader

Fast, high quality YouTube downloads.
youtubedownloader.duckdns.org »

YouTube Downloader is a full stack application created to allow users to download YouTube videos. The user is able to select from a variety of audio and video formats and other configuration options.

Features

  • Directly search YouTube for videos.
  • Download and convert multiple videos concurrently.
  • Download quality options (best, worst).
  • Option to automatically embed video metadata, thumbnail, and subtitles.
  • Variety of audio formats supported (AAC, FLAC, M4A, MP3, OPUS, WAV).
  • Variety of video formats supported (AVI, FLV, MKV, MOV, MP4, WEBM).
  • Web UI with support for dark and light themes.

Developer Guide

Please refer to the contributing guide for how to install the project for development purposes.

Monorepo structure:

Apps:

  • api: An API developed in Python using FastAPI.
  • extension: A browser extension developed using WXT and Svelte.
  • web: A web application developed in SvelteKit.

Packages:

  • client: A TypeScript API client generated from the OpenAPI specification for the API using openapi-ts.
  • config: Common configs shared between other packages and apps in the monorepo.
  • ui: A UI library used by the project developed in Svelte.

youtube-downloader's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar jordanshatford avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

youtube-downloader's Issues

feat(cli): show video duration in list of results

Describe the problem

Right now the list of results only provides title and channel name. We have no way of determining the duration.

Describe the proposed solution

Include the duration as [XX:XX:XX] Title - Channel

Alternatives considered

N/A

Importance

nice to have

Additional information

N/A

feat(extension): create browser extension for the project

Describe the problem

Right now the user must use the command line, or the web application to download videos. They are not able to do so directly on YouTube.

Describe the proposed solution

Create an extension which utilizes the same API as the web app. This extension should persist the users preferred setting. This extension should detect if the user is on a YouTube video and allow downloading that video directly.

This extension should be fairly simple to use, and could have more features added in the future.

Alternatives considered

N/A

Importance

nice to have

Additional information

see: https://github.com/kyle-n/WebExtensionTemplate

feat(extension): show list of all downloads in popup

Describe the problem

Right now the popup will only show information for the download if the tab is a valid YouTube video and the video is being downloaded.

Describe the proposed solution

We should have a list of all downloads active in the background at the time of opening the popup. This could be a tab in the popup so that the main information is still for the current tab.

Alternatives considered

N/A

Importance

nice to have

Additional information

N/A

feat(extension): ability to restart, delete, and get file from popup for a download

Describe the problem

Right now the popup allows downloading a video and once you start the download it will be automatically downloaded to your device once it is done.

Describe the proposed solution

We should have the ability to restart, delete, and download file for each download in the popup. This should be similar to the downloads table in the website where there are action icons for each download.

Alternatives considered

N/A

Importance

nice to have

Additional information

N/A

feat(ci): use corepack when setting up node in CI

Describe the problem

Current CI uses PNPM action to setup the version of PNPM

Describe the proposed solution

Instead we should setup Node with corepack to use the package manager specified in our package.json. This will also ensure the expected version is installed.

Alternatives considered

No response

Importance

nice to have

Additional information

setup node action ticket ref: actions/setup-node#531

new PR: actions/setup-node#901

feat: update workflow conditions

The workflow should run on pull_request and workflow_dispatch. By default the pull_request includes opened, synchronised, and reopened.

feat(api): move Dockerfile for API into its directory

Describe the problem

Its currently combined with the web Dockerfile as different stages.

Describe the proposed solution

Move Dockerfile to the API directory. We can also build it in CI and push it to GitHubs registry.

Alternatives considered

No response

Importance

nice to have

Additional information

No response

feat(api): add support for multiple worker threads

Describe the problem

Right now the API only properly runs if there is 1 worker. This can cause slowdown when there are a lot of requests at once.

Describe the proposed solution

Update the API to support multiple workers.

Alternatives considered

N/A

Importance

nice to have

Additional information

This will require that the session manager object is available for all workers to ensure that one users session information is available to all threads.

feat(extension): allow modifying current download settings in popup

Describe the problem

Right now the user wants to change there download settings they need to go to the separate options page.

Describe the proposed solution

We should allow the user to modify there current settings directly in the popup.

Alternatives considered

N/A

Importance

nice to have

Additional information

N/A

feat: python 3.11

Python 3.11 was released, see if anything needs to be done to update to it.

feat(core): add logging support

Describe the problem

Right now the core works without any debugging messages or other logging messages.

Describe the proposed solution

We should implement logging in the core. This should be set to ERROR/CRITICAL by default, with the ability to log lower levels. We also likely want logging to output to a file in some cases (API). The CLI may only want logging to the console.

Alternatives considered

N/A

Importance

would make my life easier

Additional information

https://docs.python.org/3/library/logging.html

browser extension download and filename

Describe the bug

when you download with the browser extension the file you get has a different name
taking this has an example:

url: https://www.youtube.com/watch?v=6hzrDeceEKc
original name: Oasis - Wonderwall (Official Video)
artist: Oasis

file downloaded with the self hosted webui: Oasis - Wonderwall (Official Video) - Oasis.mp3
file downloaded with the self built extension: Oasis___Wonderwall___Official_Video____Oasis_mp3

for both the downloads the same backend has been used

Reproduction

use extension to download something and check the downloaded file name

Logs

No response

System information

macbook and chrome 109.0.5414.87

Severity

annoyance

Additional information

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.