Giter Site home page Giter Site logo

graham-walker / youtube-dl-react-viewer Goto Github PK

View Code? Open in Web Editor NEW
90.0 4.0 9.0 2.06 MB

Web app for youtube-dl/yt-dlp, created using the MERN stack

Home Page: https://react.gwalkerux.com/

License: MIT License

JavaScript 96.75% HTML 0.38% SCSS 2.31% Dockerfile 0.40% Batchfile 0.07% Shell 0.08%
youtube-dl yt-dlp sponsorblock

youtube-dl-react-viewer's Introduction

icon

youtube-dl-react-viewer

youtube-dl-react-viewer is a web app for yt-dlp/youtube-dl created using the MERN stack. Supports viewing and downloading videos. Usage with yt-dlp is assumed but most forks should work.

๐Ÿ“ทScreenshots | ๐ŸŒŽLive Demo



Features

  • Watch downloaded videos in the browser across your devices
  • Download videos by creating and running download jobs
  • Import your existing downloads
  • SponsorBlock integration
  • Watch history and resume playback
  • Full-text search and sort
  • Subtitle support
  • Autoplay & looping
  • Open video streams in VLC
  • Automatically generated playlists
  • Similar video recommendations
  • Sitewide password protection
  • Dark/OLED dark theme
  • Channel icon downloader (YouTube and SoundCloud only)
  • Verify the integrity (hash) of downloads
  • Download video comments
  • YouTube chat replay

Install

Caution

Once updated, it is not recommended to downgrade an existing installation. Doing so will risk database corruption. If you plan on downgrading in the future, please backup your database before updating.

Docker Installation

Note

If you are updating an existing Docker installation simply repeat these same steps for the latest version. Remember to make the same edits to docker-compose.yaml as environment variables will be reset otherwise.

  1. Clone the repository git clone https://github.com/graham-walker/youtube-dl-react-viewer

  2. Navigate to cd ./youtube-dl-react-viewer

  3. Select the release you want to install git checkout tags/v1.3.1

    • Installing from main is not recommended as database breaking changes can be made between releases
  4. Set the environment variables by editing docker-compose.yaml

    • Set SUPERUSER_USERNAME to the desired username for the superuser account
    • Set SUPERUSER_PASSWORD to the desired password for the superuser account. Value cannot be 'password' and must be at least 8 characters
    • Set JWT_TOKEN_SECRET to any securely generated random string. At least 32 characters is recommended. Value cannot be 'secret'
    • If using a HTTPS server set SECURE_COOKIES=true. If running locally leave the value as false
    • If you are not planning on using yt-dlp set the update command for your fork YOUTUBE_DL_UPDATE_COMMAND=python3 -m pip install your-fork-name
    • Other environment variables can optionally be set
  5. Build the image and start the container docker compose up -d (on Linux run as sudo)

    • If using Compose V1 run docker-compose up -d instead
  6. Install yt-dlp or your preferred fork to the container

    • Open the container command line docker exec -it youtube-dl-react-viewer-app-1 /bin/sh (on Linux run as sudo)
    • Install yt-dlp python3 -m pip install --no-deps -U yt-dlp
  7. View the web app in the browser http://localhost:5000

    • Access from other devices on your network by replacing localhost with your device ip address (find using ipconfig on Windows or ip addr on Linux)
    • If this does not work check if your firewall settings are blocking Node.js
  8. Downloads can be found in the Docker volume youtube-dl-react-viewer_ytrv_downloads

Manual Installation

  1. Install Python 3.7+ (this step can be skipped on Windows)

  2. Install yt-dlp and add yt-dlp to PATH

  3. Install the latest versions of FFmpeg and FFprobe and add ffmpeg and ffprobe to PATH

  4. Install Node.js 18.16.0 and npm 9.2.0

  5. Install MongoDB 6.0.0

  6. Download the Source code (zip) for the latest release of youtube-dl-react-viewer

    • Unzip to the location of your choosing
    • Navigate to cd ./youtube-dl-react-viewer/youtube-dl-express-backend
    • Copy .env.sample to .env (you may need to enable view hidden files and folders)
    • Set environment variables by editing .env
      • Set OUTPUT_DIRECTORY to the location you want to save downloads. Set to an empty directory
        • On Windows it is recommended to use a location as close to the root directory as possible C:\youtube-dl to avoid issues with the path length limit
      • Set SUPERUSER_USERNAME to the desired username for the superuser account
      • Set SUPERUSER_PASSWORD to the desired password for the superuser account. Value cannot be 'password' and must be at least 8 characters
      • Set JWT_TOKEN_SECRET to any securely generated random string. At least 32 characters is recommended. Value cannot be 'secret'
      • If using a HTTPS server set SECURE_COOKIES=true. If running locally leave the value as false
      • On Windows make sure FFMPEG_PATH="C:/Path/To/ffmpeg.exe" instead of ffmpeg. Using PATH for FFmpeg does not work with the web app on Windows
      • If you installed yt-dlp using pip set YOUTUBE_DL_UPDATE_COMMAND=python3 -m pip install --no-deps -U yt-dlp
      • Other environment variables can optionally be set
    • Return to the parent directory cd ..
    • Install additional dependencies and build the web app sh install.sh (on Windows run install.bat instead)
    • Start the web app sh start-server.sh (on Windows run start-server.bat instead)
    • View the web app in the browser http://localhost:5000
      • Access from other devices on your network by replacing localhost with your device ip address (find using ipconfig on Windows or ip addr on Linux). If this does not work check if your firewall settings are blocking Node.js
    • View the console output pm2 logs youtube-dl-react-viewer
    • Stop the web app pm2 stop youtube-dl-react-viewer

Open URLs in VLC

To open videos using the open in VLC button on PC/Mac you must register the vlc:// URL protocol. You can do this with stefansundin/vlc-protocol.

No additional configuration is required for iOS/Android devices.

Environment Variables

OUTPUT_DIRECTORY                    Location downloads will be saved to
                                    (path, default: '/youtube-dl')

SUPERUSER_USERNAME                  Superuser username. The superuser is
                                    created when the web app is started
                                    (string < 50, default: admin)

SUPERUSER_PASSWORD                  Superuser password. If the value is
                                    `password` or less than 8 characters the 
                                    app will not start
                                    (string > 8 && !== password, default:
                                    password)

JWT_TOKEN_SECRET                    Secret key to sign the JSON Web Token. If
                                    the value is `secret` the app will not
                                    start. Use a securely generated random
                                    string at least 32 characters long
                                    (string !== secret, default: secret)

MONGOOSE_URL                        Database connection URL. If the database
                                    does not exist it will be created
                                    (url, default:
                                    mongodb://127.0.0.1:27017/youtubeDlDB)

BACKEND_PORT                        Port used by the web app
                                    (0-65535, default: 5000)

SECURE_COOKIES                      Only serve cookies over HTTPS. Enable if
                                    not running locally
                                    (true|false, default: false)

YOUTUBE_DL_PATH                     Path to yt-dlp/youtube-dl. Forks should
                                    work as drop in replacements
                                    (path, default: yt-dlp)

FFMPEG_PATH                         Path to FFmpeg
                                    (path, default: ffmpeg)

FFPROBE_PATH                        Path to FFprobe
                                    (path, default: ffprobe)

THUMBNAIL_QUALITY                   JPEG quality level for thumbnails. Does not
                                    effect existing thumbnails
                                    (0-100, default: 80)

THUMBNAIL_CHROMA_SUBSAMPLING        Chroma subsampling for thumbnails. Does not
                                    effect existing thumbnails
                                    (4:4:4|4:2:0, default: 4:4:4)

PAGE_SIZE                           Number of videos that will be loaded per
                                    page
                                    (number >= 1, default: 54)

SKIP_HASHING                        Do not generate hashes when importing
                                    videos
                                    (true|false, default: false)

ENABLE_USER_REGISTRATION            Allow users to create accounts
                                    (true|false: default: true)

DISPLAY_SIMILAR_VIDEOS              Algorithm used to find similar videos. With
                                    lots of videos the algorithm can make page
                                    loads slow. Consider changing or disabling
                                    (complex|simple|disabled, default: complex)

SPONSORBLOCK_API_URL                API used to retrieve sponsor segments
                                    (url, default: https://sponsor.ajay.app/)

EXPOSE_LOCAL_VIDEO_PATH             Expose the local video path to the user to
                                    allow for local VLC playback
                                    (true|false, default: false)

YOUTUBE_DL_UPDATE_COMMAND           Command run when updating youtube-dl from
                                    the admin panel. If not set will run `-U`
                                    (string, default: '')

VERBOSE                             Print detailed error messages to the
                                    console
                                    (true|false, default: false)

NODE_ENV                            Should be set to `production` unless
                                    running in development mode `development`
                                    (string, default: production)

REACT_APP_BRAND                     Name shown in the navbar
                                    (string, default: youtube-dl Viewer)

REACT_APP_CHECK_FOR_UPDATES         Automatically check the GitHub repo for
                                    new releases on the admin page
                                    (true|false, default: true) 

REACT_APP_SHOW_VERSION_TAG          Display the current release version number 
                                    in the navbar
                                    (true|false, default: true)

REACT_APP_LIGHT_THEME_LOGO          Light theme icon in the navbar
                                    (url, default: /logo.svg)

REACT_APP_DARK_THEME_LOGO           Dark theme icon in the navbar
                                    (url, default: /logo.svg)

REACT_APP_LOAD_EXTERNAL_THUMBNAILS  Load thumbnails and avatars from third
                                    parties
                                    (true|false, default: false)

REACT_APP_OUT_OF_DATE_COLOR_DAYS    Days until a job is highlighted in red to
                                    alert that it has not been run recently
                                    (number > 0, default: 30)

When setting environment variables that start with REACT_APP_ you will need to rebuild the web app for changes to take effect:

cd ./youtube-dl-react-frontend
npm install --unsafe-perm
npm run build

You can change the favicon and manifest icons by replacing the files in ./youtube-dl-react-frontend/public and rebuilding the app.

The repo and check for update URLs are hard coded in ./youtube-dl-react-frontend/src/index.js.

Downloading

To download videos from the web app you must be signed in with the superuser account.

  1. Navigate to the admin panel http://localhost:5000/admin

  2. Scroll to the jobs section

  3. Create and save a new job

    Job name                        Job display name
    
    Format code                     Format code used by yt-dlp/youtube-dl when
                                    downloading videos
    
    Download audio only             Should only audio be downloaded
    
    Download comments               Should comments be downloaded. Only works
                                    if using yt-dlp
    
    Recode video                    Convert downloaded videos to mp4 to
                                    increase browser playback compatibility
    
    URLs                            URLs that will be downloaded by the job.
                                    URLs can be individual videos, channels, 
                                    playlists, etc. One URL per line
    
    Override config                 Arguments passed to yt-dlp/youtube-dl when
                                    downloading. For example, you can set
                                    `--cookies C:/Path/To/cookies.txt` here
    
    Override uploader               Overrides the uploader for a video 
                                    downloaded by this job. Useful for websites 
                                    that do not return the uploader name in
                                    metadata
    
  4. Scroll to download section

  5. Select the jobs you want to download. Multiple jobs can be selected. Jobs will run in the order they are started

Importing Already Downloaded Videos

You can import videos already downloaded with yt-dlp/youtube-dl as long as they were downloaded with the --write-info-json option and the .json file is in the same folder as the video.

To import videos from the web app you must be signed in with the superuser account.

  1. Navigate to the admin panel http://localhost:5000/admin
  2. Scroll to the import videos section
Folder to import                    Folder on the server computer to import
                                    videos from

Job                                 Job imported videos will be added to.
                                    Imported videos will appear in the web app
                                    as if have been downloaded by this job

Search subfolders                   Search subfolders for videos

Copy files                          Copy files when importing instead of moving
                                    them

Continue on failed                  Continue importing videos if a single video
                                    fails to import

Override ext                        Sometimes the video file extension cannot
                                    be determined by the importer. If you know
                                    the extension you can set it here

If the web app was installed using Docker you will need to copy your existing downloads into the Docker volume before they can be imported.

# 1. Copy the existing downloads to a temporary folder in the Docker container
docker cp "C:\Your\Existing\Downloads" youtube-dl-react-viewer-app-1:/youtube-dl/TEMP

# 2. Import the temporary folder
/youtube-dl/TEMP

Issues & Limitations

  • Browser Playback:
    The format code bestvideo*+bestaudio/best is used by default. This can sometimes create videos with codecs individual browsers do not support. If a playback error occurs, try any of the following: open in VLC button, enable spoof type, use a different browser, change the format code and redownload.

    To create videos with better browser playback compatibility, try using the format code (bestvideo[vcodec^=h264]+bestaudio[acodec^=aac])/mp4/best or enable recode video in job settings (may reduce quality).

  • Playlists:
    youtube-dl only downloads playlist metadata if a video was downloaded as part of a playlist. If you have already downloaded a video and then download a playlist that includes the same video, it will not appear in the automatically generated playlist in the web app. The best approach to prevent this is to download playlists before downloading individual videos.

  • Xattrs:
    Windows does not support xattrs. Videos downloaded on Windows will not have xattrs added to them.

  • Windows Path Limit:
    Windows file paths cannot be longer than 260 characters. To prevent errors where downloaded file names are too long, set the output directory to a location as close to the root directory as possible C:\youtube-dl. Alternatively, you can remove the path length limit by enabling long paths.

  • PM2 and Windows
    PM2 is used to manage the web app process if it was installed using the manual install method. On Windows, console windows may briefly appear when starting a download job. This is an issue that occurs when a process PM2 is managing spawns a subprocess. To prevent this you can start the web app with node instead, however, it will not auto restart if it crashes.

    cd ./youtube-dl-express-backend
    node --require dotenv/config index.js
    

Handling Download Errors

There are two main types of errors that can occur when downloading videos:

  1. youtube-dl fails to download a video
    This could happen for many reasons: poor internet connection, incompatible format code, broken extractor, private video, etc. These errors are not recorded by the web app, but can be seen in the console output. youtube-dl will try to download the video again the next time the job is run. If you notice a video did not download but do not see an error on the admin page it is most likely because youtube-dl failed to download it.

  2. youtube-dl successfully downloads a video, but the web app fails to import it
    This could happen if the web app could not read the metadata downloaded by youtube-dl or could not identify the video file, thumbnails, subtitles, etc. youtube-dl will not try to redownload the video as it has been successfully downloaded.

    You can attempt to reimport videos from the failed to import section of the admin panel. This will likely still fail until a version of the web app that fixes the issue is released. Report import errors here.

FAQ

Q: How do I sign in to websites that require a login?

A: You can set cookies for individual jobs to login to websites. Sign in and export a Netscape cookie file for the website. Edit a job, open advanced options and add this line to override config --cookies "C:/Path/To/cookies.txt"

Q: Can I update youtube-dl from the web app?

A: You can update youtube-dl from the youtube-dl section of the admin panel.

If you installed youtube-dl with a package manager you may need to set the environment variable YOUTUBE_DL_UPDATE_COMMAND to the correct update command.

Q: How can I add uploader icons to the web app?

A: Uploader icons for YouTube and SoundCloud can be downloaded automatically from the uploader icons section of the admin panel.

For other websites uploader icons must be downloaded manually and placed in the ./avatars folder of the output directory. Use the Network tab of the browser DevTools to find the expected filename.

Q: I am running out of space. Can I use a second hard drive or change/add another output directory?

A: You cannot set more than one output directory. If you need to change the output directory, stop the web app and change the environment variable OUTPUT_DIRECTORY. Move the contents of the previous output directory to the new one. Paths are stored relative to the output directory so you will not need to update anything else.

If you need more space than a single hard drive can offer, use a drive pooling solution like DrivePool.

Q: Where files generated by youtube-dl, such as archive.txt located?

A: These files are located at the root of the output directory. You can also view them from the logs section of the admin panel.

Q: Can I delete downloaded videos?

A: Videos can be deleted from the admin panel, with the option to prevent videos from being redownloaded or not.

If you are deleting videos because you are running low on storage, note that the actual video files are not deleted until the server is restarted.

Planned

Planned features in no particular order. There is no timeline or guarantee features will be added.

In release 1.2.1:

  • Import already downloaded videos
  • Docker container
  • Uploader pages
  • Update youtube-dl from the web app

In release 1.3.0:

  • Watch history
  • Video playback resume
  • Dark aware theme
  • Verify the integrity of video file hashes
  • SponsorBlock Implementation
  • Display video chapters in the player
  • Chat replay (YouTube only)

Planned for future releases:

  • Create custom playlists, favorites, comments
  • Search and sort for uploaders
  • 3D/VR video playback
  • Refetch updated metadata for downloaded videos
  • Twitch chat replay
  • Stream audio only mode
  • Download job scheduling

License/Credits

Disclaimer

youtube-dl-react-viewer does not contain any code from ytdl-org/youtube-dl. youtube-dl-react-viewer by itself does not have any capability to download videos.

youtube-dl-react-viewer's People

Contributors

graham-walker avatar jamodevnich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

youtube-dl-react-viewer's Issues

Ability to schedule a job

Enhancement Request: Add the ability to schedule a job to run on a regular basis in addition to the "Run" button.

Example: Run this job once an hour/Run this job once a day

How to install and update youtube-dl in docker container?

Instructions.

Outside of Docker

$ docker exec -it youtube-dl-react-viewer_app_1 /bin/sh

Inside Docker

/opt/youtube-dl-react-viewer/youtube-dl-express-backend # apt-get install youtube-dl
/bin/sh: apt-get: not found

Solution

$ pip install youtube-dl

That works, but youtube-dl will no longer be updated via webapp:

It looks like you installed youtube-dl with a package manager, pip, setup.py or a tarball. Please use that to update.

image

Uninstall

Hi! Is there a way to undo everything that the install.bat performed, i.e. an uninstall ability?

Playback in Docker container not want to works

When I try playback video downloaded I get unknown format error when I enable trans-coding I get this error in console.


node:events:306


      throw er; // Unhandled 'error' event


      ^



Error: Output stream closed


    at Timeout._onTimeout (/opt/youtube-dl-react-viewer/youtube-dl-express-backend/node_modules/fluent-ffmpeg/lib/processor.js:491:25)


    at listOnTimeout (node:internal/timers:556:17)


    at processTimers (node:internal/timers:499:7)


Emitted 'error' event on FfmpegCommand instance at:


    at emitEnd (/opt/youtube-dl-react-viewer/youtube-dl-express-backend/node_modules/fluent-ffmpeg/lib/processor.js:424:16)


    at Timeout._onTimeout (/opt/youtube-dl-react-viewer/youtube-dl-express-backend/node_modules/fluent-ffmpeg/lib/processor.js:491:17)


    at listOnTimeout (node:internal/timers:556:17)


    at processTimers (node:internal/timers:499:7)

Videos with large number of comments fail to import + Emojis in video titles seem to break downloads

Hi! Love this project so much, and I'm not totally sure how all the parts interact, so maybe this is a yt-dlp issue or a youtube-dl-exec issue or even a windows issue idk! (could not for the life of me figure out how to use this between drives on docker)

I was exploring the database and saw an error entry for two videos I had wanted to download with emojis in the titles. Its been the only issue in over 100 videos so I took a look at the log and it has "ERROR: Could not find video file: " and then the file path with the emojis in the string. Looking at the files that get downloaded, they also have the emoji in the title. At [download], the file paths do not have emoji in them. I will attach the console output, and I see that it says to use -d for debug output but I cannot seem to work that out either... I am really sorry to be dense ๐Ÿ˜ฌ

I am using stock latest yt-dlp, windows 10, and firefox if any of that might help.

console_output.txt

Web App wont open

Screenshot 2021-03-24 210918
Hey there. Sorry that this might be a very simple problem but I am not very technical and am not sure why it wont open. This is what i get when I try to run the server. Ive installed everything and followed the readme, but cant seem to find what I did wrong.\

This is what I get.

I pasted and put a screenshot.

[email protected] start > pm2 start pm2.config.json [PM2] Applying action restartProcessId on app [youtube-dl-react-viewer](ids: [ 0 ]) [PM2] youtube-dl-react-viewer โœ“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ id โ”‚ name โ”‚ namespace โ”‚ version โ”‚ mode โ”‚ pid โ”‚ uptime โ”‚ โ†บ โ”‚ status โ”‚ cpu โ”‚ mem โ”‚ user โ”‚ watching โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ 0 โ”‚ youtube-dl-react-viewer โ”‚ default โ”‚ 1.2.1 โ”‚ fork โ”‚ 25808 โ”‚ 0 โ”‚ 46 โ”‚ stopped โ”‚ 0% โ”‚ 0b โ”‚ elias โ”‚ disabled โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ Press any key to continue . . .

docker-compose doesn't work under Raspberry Pi 4B

When I build the container with

sudo docker-compose up -d

it stops at

Step 7/17 : RUN npm install --unsafe-perm

with the error message

npm ERR! ERR! sharp Prebuilt libvips 8.10.0 binaries are not yet available for linuxmusl-arm64v8

uname -m returns

aarch64

any idea how to get it running?

Output directory

Output directory is being put in so not sure why its saying it's not there. Is probably just me getting it wrong.
.env file:

'OUTPUT_DIRECTORY': {
    type: String,
    required: true,
    default: '/home/jake/Documents',
},

Is giving this error. :
0|youtube-dl-react-viewer | Error: Required environment variable "OUTPUT_DIRECTORY" not specified.
0|youtube-dl-react-viewer | at parse (file:///home/jake/Documents/Youtube%20Channels/a/youtube-dl-react-viewer/youtube-dl-express-backend/parse-env.js:87:27)
0|youtube-dl-react-viewer | at file:///home/jake/Documents/Youtube%20Channels/a/youtube-dl-react-viewer/youtube-dl-express-backend/parse-env.js:143:16
0|youtube-dl-react-viewer | at ModuleJob.run (internal/modules/esm/module_job.js:152:23)
0|youtube-dl-react-viewer | at async Loader.import (internal/modules/esm/loader.js:166:24)

yt-dlp installation problem

To try to solve problem #21 I'm trying to use yt-dlp, but i can't install it, has anyone had the same problem?

/opt/youtube-dl-react-viewer/youtube-dl-express-backend # pip install yt-dlp
Collecting yt-dlp
  Using cached yt_dlp-2021.7.7-py2.py3-none-any.whl (2.1 MB)
Requirement already satisfied: websockets in /usr/lib/python3.8/site-packages (from yt-dlp) (9.1)
Collecting mutagen
  Using cached mutagen-1.45.1-py3-none-any.whl (218 kB)
Collecting pycryptodome
  Using cached pycryptodome-3.10.1.tar.gz (3.8 MB)
Using legacy setup.py install for pycryptodome, since package 'wheel' is not installed.
Installing collected packages: mutagen, pycryptodome, yt-dlp
    Running setup.py install for pycryptodome ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8itqrue/pycryptodome/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8itqrue/pycryptodome/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-hc_sg8rq/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/pycryptodome
         cwd: /tmp/pip-install-u8itqrue/pycryptodome/
    Complete output (311 lines):
    Testing support for clang
    Target does not support clang
    Testing support for gcc
    Target does not support gcc
    Testing support for stdint.h header
    Target does not support stdint.h header
    Testing support for 128-bit integer
    Target does not support 128-bit integer
    Testing support for cpuid.h header
    Target does not support cpuid.h header
    Testing support for intrin.h header
    Target does not support intrin.h header
    Testing support for posix_memalign
    Target does not support posix_memalign
    Testing support for memalign
    Target does not support memalign
    Testing support for SSE2(intrin.h)
    Target does not support SSE2(intrin.h)
    Testing support for SSE2(x86intrin.h)
    Target does not support SSE2(x86intrin.h)
    Testing support for SSE2(emmintrin.h)
    Target does not support SSE2(emmintrin.h)
    Warning: compiler does not support AESNI instructions
    Warning: compiler does not support CLMUL instructions
    running install
    running build
    running build_py
    creating build/lib.linux-x86_64-3.8
    creating build/lib.linux-x86_64-3.8/Crypto
    copying lib/Crypto/__init__.py -> build/lib.linux-x86_64-3.8/Crypto
    creating build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ecb.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_cbc.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ccm.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ARC2.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/PKCS1_OAEP.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/DES3.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_gcm.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ofb.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/CAST.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/DES.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/Salsa20.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ctr.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ChaCha20_Poly1305.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ocb.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/AES.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_eax.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_openpgp.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_siv.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_EKSBlowfish.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/Blowfish.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ARC4.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/PKCS1_v1_5.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ChaCha20.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_cfb.py -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    creating build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHAKE256.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA256.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD2.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHAKE128.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA1.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/RIPEMD160.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_224.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA512.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_512.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/keccak.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_384.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/RIPEMD.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/Poly1305.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA384.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/CMAC.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_256.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/BLAKE2b.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD5.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/HMAC.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA224.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/BLAKE2s.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD4.py -> build/lib.linux-x86_64-3.8/Crypto/Hash
    creating build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/PKCS8.py -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/PEM.py -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/_PBES.py -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/IO
    creating build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/ElGamal.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/RSA.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/DSA.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/_openssh.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/ECC.py -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    creating build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Protocol/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Protocol/SecretSharing.py -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Protocol/KDF.py -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    creating build/lib.linux-x86_64-3.8/Crypto/Random
    copying lib/Crypto/Random/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Random
    copying lib/Crypto/Random/random.py -> build/lib.linux-x86_64-3.8/Crypto/Random
    creating build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/DSS.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/pss.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/pkcs1_15.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/PKCS1_v1_5.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/PKCS1_PSS.py -> build/lib.linux-x86_64-3.8/Crypto/Signature
    creating build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/number.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_file_system.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/Counter.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/asn1.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_cpu_features.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/RFC1751.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/strxor.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_raw_api.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/py3compat.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/Padding.py -> build/lib.linux-x86_64-3.8/Crypto/Util
    creating build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerNative.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/Numbers.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerGMP.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerCustom.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerBase.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/Primality.py -> build/lib.linux-x86_64-3.8/Crypto/Math
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest
    copying lib/Crypto/SelfTest/__main__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest
    copying lib/Crypto/SelfTest/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest
    copying lib/Crypto/SelfTest/loader.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest
    copying lib/Crypto/SelfTest/st_common.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_OCB.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_CBC.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_ARC2.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_SIV.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_OpenPGP.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_CFB.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_CAST.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_DES3.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_ARC4.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_OFB.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_CTR.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_pkcs1_oaep.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_GCM.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_Blowfish.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_pkcs1_15.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_EAX.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/common.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_DES.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_Salsa20.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_ChaCha20.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_CCM.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    copying lib/Crypto/SelfTest/Cipher/test_AES.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Cipher
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA512.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA3_256.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_Poly1305.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_CMAC.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA256.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_MD5.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA224.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_MD4.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_HMAC.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_BLAKE2.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_RIPEMD160.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA1.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHAKE.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA3_512.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_MD2.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA3_384.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/common.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA3_224.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_keccak.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    copying lib/Crypto/SelfTest/Hash/test_SHA384.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Hash
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/IO
    copying lib/Crypto/SelfTest/IO/test_PBES.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/IO
    copying lib/Crypto/SelfTest/IO/test_PKCS8.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/IO
    copying lib/Crypto/SelfTest/IO/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/IO
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Protocol
    copying lib/Crypto/SelfTest/Protocol/test_KDF.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Protocol
    copying lib/Crypto/SelfTest/Protocol/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Protocol
    copying lib/Crypto/SelfTest/Protocol/test_rfc1751.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Protocol
    copying lib/Crypto/SelfTest/Protocol/test_SecretSharing.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Protocol
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_ElGamal.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_ECC.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_import_DSA.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_RSA.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_import_ECC.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_import_RSA.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    copying lib/Crypto/SelfTest/PublicKey/test_DSA.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/PublicKey
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Random
    copying lib/Crypto/SelfTest/Random/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Random
    copying lib/Crypto/SelfTest/Random/test_random.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Random
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Signature
    copying lib/Crypto/SelfTest/Signature/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Signature
    copying lib/Crypto/SelfTest/Signature/test_pss.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Signature
    copying lib/Crypto/SelfTest/Signature/test_pkcs1_15.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Signature
    copying lib/Crypto/SelfTest/Signature/test_dss.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Signature
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_strxor.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_number.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_Padding.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_rfc1751.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_Counter.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    copying lib/Crypto/SelfTest/Util/test_asn1.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Util
    creating build/lib.linux-x86_64-3.8/Crypto/SelfTest/Math
    copying lib/Crypto/SelfTest/Math/test_Numbers.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Math
    copying lib/Crypto/SelfTest/Math/__init__.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Math
    copying lib/Crypto/SelfTest/Math/test_modexp.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Math
    copying lib/Crypto/SelfTest/Math/test_Primality.py -> build/lib.linux-x86_64-3.8/Crypto/SelfTest/Math
    copying lib/Crypto/py.typed -> build/lib.linux-x86_64-3.8/Crypto
    copying lib/Crypto/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto
    copying lib/Crypto/Cipher/CAST.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/Blowfish.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_cbc.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ocb.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ARC2.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/AES.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/DES.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/PKCS1_v1_5.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/DES3.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ARC4.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ChaCha20_Poly1305.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_siv.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_eax.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ofb.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/ChaCha20.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_EKSBlowfish.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ecb.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ctr.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/PKCS1_OAEP.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_gcm.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_cfb.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_openpgp.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/_mode_ccm.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Cipher/Salsa20.pyi -> build/lib.linux-x86_64-3.8/Crypto/Cipher
    copying lib/Crypto/Hash/Poly1305.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD5.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA512.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/BLAKE2s.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/RIPEMD160.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/CMAC.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/RIPEMD.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/HMAC.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA256.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_256.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA1.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/BLAKE2b.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_224.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD4.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA384.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHAKE128.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_384.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/keccak.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA3_512.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/MD2.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHAKE256.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/Hash/SHA224.pyi -> build/lib.linux-x86_64-3.8/Crypto/Hash
    copying lib/Crypto/IO/PKCS8.pyi -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/_PBES.pyi -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/IO/PEM.pyi -> build/lib.linux-x86_64-3.8/Crypto/IO
    copying lib/Crypto/PublicKey/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/DSA.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/ECC.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/RSA.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/ElGamal.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/PublicKey/_openssh.pyi -> build/lib.linux-x86_64-3.8/Crypto/PublicKey
    copying lib/Crypto/Protocol/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Protocol/KDF.pyi -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Protocol/SecretSharing.pyi -> build/lib.linux-x86_64-3.8/Crypto/Protocol
    copying lib/Crypto/Random/__init__.pyi -> build/lib.linux-x86_64-3.8/Crypto/Random
    copying lib/Crypto/Random/random.pyi -> build/lib.linux-x86_64-3.8/Crypto/Random
    copying lib/Crypto/Signature/PKCS1_v1_5.pyi -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/PKCS1_PSS.pyi -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/pkcs1_15.pyi -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/DSS.pyi -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Signature/pss.pyi -> build/lib.linux-x86_64-3.8/Crypto/Signature
    copying lib/Crypto/Util/RFC1751.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_cpu_features.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/Counter.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/asn1.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_file_system.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/py3compat.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/strxor.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/number.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/Padding.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Util/_raw_api.pyi -> build/lib.linux-x86_64-3.8/Crypto/Util
    copying lib/Crypto/Math/_IntegerBase.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerNative.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/Numbers.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerCustom.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/_IntegerGMP.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    copying lib/Crypto/Math/Primality.pyi -> build/lib.linux-x86_64-3.8/Crypto/Math
    running build_ext
    building 'Crypto.Hash._MD2' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/src
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPYCRYPTO_LITTLE_ENDIAN -DSYS_BITS=64 -DLTC_NO_ASM -Isrc/ -I/usr/include/python3.8 -c src/MD2.c -o build/temp.linux-x86_64-3.8/src/MD2.o
    unable to execute 'gcc': No such file or directory
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8itqrue/pycryptodome/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8itqrue/pycryptodome/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-hc_sg8rq/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/pycryptodome Check the logs for full command output.

Error importing downloaded videos

I have been getting this error every time I try to import videos. I am running rpi4 on Ubuntu 20.04LTS. And why is the log saved at /root? I had to give my user account permission to /root dir. Wouldn't it be better to save it under current user home directory?

I would like to say thank you for putting your time and effort into building this project. I really like the UI and it's so much better than fiddling with Plex to add YouTube videos. It would be nice if you could build a docker container for armv7 and aarch64 architecture.

$ uname -a 
Linux ubuntu 5.4.0-1025-raspi #28-Ubuntu SMP PREEMPT Wed Dec 9 17:10:53 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
$
$
$ sudo npm run import -- -f "/media/U/YT/Gigguk\ -\ \[UC7dF9qfBMXrSlaaFFDvV_Yg\]/Summer\ Anime\ 2020\ in\ a\ Nutshell\ -\ Gigguk\ -\ 20200731/" -j "Imported Videos" -c -r

> [email protected] import
> node --require dotenv/config import.js "-f" "/media/U/YT/Gigguk\\ -\\ \\[UC7dF9qfBMXrSlaaFFDvV_Yg\\]/Summer\\ Anime\\ 2020\\ in\\ a\\ Nutshell\\ -\\ Gigguk\\ -\\ 20200731/" "-j" "Imported Videos" "-c" "-r"

Connecting to database with URL: mongodb://localhost:27017/youtubeDlDB...
[youtube-dl-import-script] Connected
npm ERR! code 1
npm ERR! path /home/ubuntu/Pulled-Projects/youtube-dl-react-viewer/youtube-dl-express-backend
npm ERR! command failed
npm ERR! command sh -c node --require dotenv/config import.js "-f" "/media/U/YT/Gigguk\\ -\\ \\[UC7dF9qfBMXrSlaaFFDvV_Yg\\]/Summer\\ Anime\\ 2020\\ in\\ a\\ Nutshell\\ -\\ Gigguk\\ -\\ 20200731/" "-j" "Imported Videos" "-c" "-r"

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-12-27T02_21_19_666Z-debug.log

Contents of the log file.

0 verbose cli [
0 verbose cli   '/usr/bin/node',
0 verbose cli   '/usr/bin/npm',
0 verbose cli   'run',
0 verbose cli   'import',
0 verbose cli   '--',
0 verbose cli   '-f',
0 verbose cli   '/media/U/YT/Gigguk\\ -\\ \\[UC7dF9qfBMXrSlaaFFDvV_Yg\\]/Summer\\ Anime\\ 2020\\ in\\ a\\ Nutshell\\ -\\ Gigguk\\ -\\ 20200731/',
0 verbose cli   '-j',
0 verbose cli   'Imported Videos',
0 verbose cli   '-c',
0 verbose cli   '-r'
0 verbose cli ]
1 info using [email protected]
2 info using [email protected]
3 timing config:load:defaults Completed in 5ms
4 timing config:load:file:/usr/lib/node_modules/npm/npmrc Completed in 2ms
5 timing config:load:builtin Completed in 2ms
6 timing config:load:cli Completed in 5ms
7 timing config:load:env Completed in 0ms
8 timing config:load:file:/home/ubuntu/Pulled-Projects/youtube-dl-react-viewer/youtube-dl-express-backend/.npmrc Completed in 3ms
9 timing config:load:project Completed in 4ms
10 timing config:load:file:/root/.npmrc Completed in 0ms
11 timing config:load:user Completed in 0ms
12 timing config:load:file:/usr/etc/npmrc Completed in 1ms
13 timing config:load:global Completed in 1ms
14 timing config:load:cafile Completed in 0ms
15 timing config:load:validate Completed in 2ms
16 timing config:load:setUserAgent Completed in 1ms
17 timing config:load:setEnvs Completed in 3ms
18 timing config:load Completed in 24ms
19 verbose npm-session c408603b672bd44c
20 timing npm:load Completed in 47ms
21 timing command:run-script Completed in 1414ms
22 verbose stack Error: command failed
22 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27)
22 verbose stack     at ChildProcess.emit (node:events:376:20)
22 verbose stack     at maybeClose (node:internal/child_process:1063:16)
22 verbose stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:295:5)
23 verbose pkgid [email protected]
24 verbose cwd /home/ubuntu/Pulled-Projects/youtube-dl-react-viewer/youtube-dl-express-backend
25 verbose Linux 5.4.0-1025-raspi
26 verbose argv "/usr/bin/node" "/usr/bin/npm" "run" "import" "--" "-f" "/media/U/YT/Gigguk\\ -\\ \\[UC7dF9qfBMXrSlaaFFDvV_Yg\\]/Summer\\ Anime\\ 2020\\ in\\ a\\ Nutshell\\ -\\ Gigguk\\ -\\ 20200731/" "-j" "Imported Videos" "-c" "-r"
27 verbose node v15.4.0
28 verbose npm  v7.0.15
29 error code 1
30 error path /home/ubuntu/Pulled-Projects/youtube-dl-react-viewer/youtube-dl-express-backend
31 error command failed
32 error command sh -c node --require dotenv/config import.js "-f" "/media/U/YT/Gigguk\\ -\\ \\[UC7dF9qfBMXrSlaaFFDvV_Yg\\]/Summer\\ Anime\\ 2020\\ in\\ a\\ Nutshell\\ -\\ Gigguk\\ -\\ 20200731/" "-j" "Imported Videos" "-c" "-r"
33 verbose exit 1

Playback of Odyssee/LBRY Videos

Versions

I'm running version 1.30 with the provided docker compose file on Debian 12. Client browser is Firefox 115 on Windows.

Description

Downloading and playback of youtube works. Downloading from odysse/lbry works, but when clicking on a video the page just goes dark.
The Firefox log provides the error message "this.props.videos is undefined" (see screenshot).

How to replicate:

Firefox log

grafik

Download stuck

After a few downloads the download appears stuck
In particular, this problem happened to me

  • after a single video in a jobs
  • after 10 videos of a channel with the channel's link in the jobs

This is the log i get form docker-compose logs -f

app_1  | [download] Destination: /youtube-dl/videos/youtube/aajbFO7xwBM/Why SpaceX Bought a Robotic Dog - Primal Space - 20200913.f399.mp4
db_1   | {"t":{"$date":"2021-07-07T22:26:54.075+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625696814:75294][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 61, snapshot max: 61 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:27:54.112+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625696874:112761][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 63, snapshot max: 63 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:28:54.125+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625696934:125143][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 130, snapshot max: 130 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:29:54.141+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625696994:141018][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 132, snapshot max: 132 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:30:54.151+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625697054:151044][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 133, snapshot max: 133 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:31:54.168+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625697114:168045][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 134, snapshot max: 134 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:32:54.175+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625697174:175468][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 135, snapshot max: 135 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}
db_1   | {"t":{"$date":"2021-07-07T22:33:54.185+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"WTCheckpointThread","msg":"WiredTiger message","attr":{"message":"[1625697234:184981][1:0x7fc3ead8e700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 137, snapshot max: 137 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0)"}}

The only way to temporarily solve this problem is to restart the container, but after some other downloads the problem return

New Install - issue with PM2 and dotenv/config

I decided to take this off docker and put it on it's own server. I migrated the mongodb to the new server and followed the instructions on the README for install.

When I try to start the app, I get this:

`rob@SRV01:~/youtubereact/youtube-dl-react-viewer release 1.2.1$ sudo pm2 start ./youtube-dl-express-backend/pm2.config.json -l log.log -o out.log -e error.log

In-memory PM2 is out-of-date, do:
$ pm2 update
In memory PM2 version: 4.5.0
Local PM2 version: 4.5.1

[PM2] Applying action restartProcessId on app [youtube-dl-react-viewer](ids: [ 0 ])
[PM2] youtube-dl-react-viewer โœ“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id โ”‚ name โ”‚ namespace โ”‚ version โ”‚ mode โ”‚ pid โ”‚ uptime โ”‚ โ†บ โ”‚ status โ”‚ cpu โ”‚ mem โ”‚ user โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0 โ”‚ youtube-dl-react-viewer โ”‚ default โ”‚ N/A โ”‚ fork โ”‚ 119885 โ”‚ 0s โ”‚ 140โ€ฆ โ”‚ online โ”‚ 0% โ”‚ 19.5mb โ”‚ root โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
rob@kub01:~/youtubereact/youtube-dl-react-viewer release 1.2.1$ sudo pm2 list

In-memory PM2 is out-of-date, do:
$ pm2 update
In memory PM2 version: 4.5.0
Local PM2 version: 4.5.1

โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id โ”‚ name โ”‚ namespace โ”‚ version โ”‚ mode โ”‚ pid โ”‚ uptime โ”‚ โ†บ โ”‚ status โ”‚ cpu โ”‚ mem โ”‚ user โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0 โ”‚ youtube-dl-react-viewer โ”‚ default โ”‚ N/A โ”‚ fork โ”‚ 0 โ”‚ 0 โ”‚ 140โ€ฆ โ”‚ errored โ”‚ 0% โ”‚ 0b โ”‚ root โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜`

I look at the log files using "sudo pm2 logs youtube-dl-react-viewer

|youtube- | Error: Cannot find module 'dotenv/config' 0|youtube- | Require stack: 0|youtube- | - internal/preload 0|youtube- | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15) 0|youtube- | at Function.Module._load (internal/modules/cjs/loader.js:725:27) 0|youtube- | at Module.require (internal/modules/cjs/loader.js:952:19) 0|youtube- | at Module._preloadModules (internal/modules/cjs/loader.js:1217:12) 0|youtube- | at loadPreloadModules (internal/bootstrap/pre_execution.js:449:5) 0|youtube- | at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:76:3) 0|youtube- | at internal/main/run_main_module.js:7:1 { 0|youtube- | code: 'MODULE_NOT_FOUND', 0|youtube- | requireStack: [ 'internal/preload' ] 0|youtube- | }

But yet, if I run the basic node command from the youtube-dl-express-backend folder:
node --require dotenv/config index.js
The application works fine, no errors, page displays, can watch videos etc.

Any thoughts on why I can't use PM2 to start the app?

Docker

Any plan to make a docker version?

Docker Compose Error: failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount1524462744/Dockerfile: no such file or directory

I'm trying to install/configure via docker compose.

When I run compose up, I get this error message:
failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount1524462744/Dockerfile: no such file or directory

This is my docker-compose.yml file:

version: "2.4"
services:

    db:
        image: mongo:6.0-jammy
        restart: unless-stopped
        mem_limit: 512m
        networks:
            - ytrv_net
        volumes:
            - ytrv_db:/data/db

    app:
        build: .
        image: graham-walker/youtube-dl-react-viewer:1.3.1
        restart: unless-stopped
        mem_limit: 512m
        networks:
            - ytrv_net
        ports:
            - "0.0.0.0:5000:5000/tcp"
        volumes:
            - /mnt/user/MyTube:/youtube-dl
        depends_on:
            - db
        environment:
            - SUPERUSER_USERNAME=admin
            - SUPERUSER_PASSWORD=admin
            - JWT_TOKEN_SECRET=<my secret)
            - SECURE_COOKIES=false
            - YOUTUBE_DL_UPDATE_COMMAND=python3 -m pip install --no-deps -U yt-dlp

volumes:
    ytrv_db:
    ytrv_downloads:

networks:
    default:
    ytrv_net:
        driver: "bridge"

Mark a view watched

Is it possible to add a "watched" status to videos per user? Meaning like a checkmark to the cover img similar to plex or jellyfin when a video has been viewed by that user? It would help to be able to pick up where I left off... Also a filter on the home screen, unwatched or all...

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.