Media Downloader is a Qt/C++ front end to youtube-dl

Overview

media-downloader

This project is a Qt/C++ based frontend to youtube-dl and it can be used to download any media file supported by youtube-dl.

Features offered:-

  1. The GUI can be used to download any media supported by youtube-dl.

  2. The GUI can show all available media a url can offer.

  3. The GUI allows user to choose what media entry offered by a url they want to download.

  4. The GUI offers a preset list of options to choose from to select what media entry offered by a url they want to download.

  5. The GUI offers an ability to change preset options or add new ones making it possible to use the GUI to automate any use case supported by youtube-dl.

  6. The GUI offers an ability to download single media or multiple medias in batches.

FAQ

A Frequently asked Questions' page is here.

Binary packages

Installer for Microsoft Windows

First make sure you have access to the internet before you run media-downloader for the first time after installation because it will attempt to use the internet to download the latest version of youtube-dl.

Binary download for Microsoft Windows is here.

Binary packages for Linux distributions

Binary downloads for a few Linux distributions are here.

Aur package for Arch Linux

Arch linux users can build the project from source using this aur package.

Binary package for Ubuntu

To install a binary package in Ubuntu, download a binary package directly and then click it and Ubuntu should offer to install it. If unsuccessful, follow instructions below for debian.

Binary package for Debian

To install a binary package for Debian, download a binary package directly and then install it by doing the following:- from the folder where you dowload the package.

1. Make sure you have Qt libraries installed.
2. Open the terminal.
3. Change directories to where the debian package is.
4. Run the following command to install it: su -c "dpkg -i *.deb"
5. Enter root's password when asked.

Binary package for Fedora and OpenSuse

To install a binary package for Fedora and OpenSuse, download a binary pacakge directly and then install it by doing the follwing:-

1. Make sure you have Qt libraries installed.
2. Open the terminal.
3. Change directories to where the debian package is.
4. Run the following command to install it: sudo rpm –i *.rpm
5. Enter root's password when asked.

Source packages

To build from source, follow the following instructions

1. Make sure you have the following packages installed:-
    - Development version of Qt libraries. They will be named
      something like "libqt5-qtbase-devel" or "qt5-devel" or
      "qtbase5-dev" or something else that sounds similar.
    - cmake
    - gcc
2. Dowload the source archive and extract it.
3. Open the terminal and change directories to inside extracted folder.
4. Run command: "mkdir build"
5. Run command: "cd build"
6. Run command: "cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=release .."
7. Run command: "make"
8. Fun command: "sudo make install"

Screenshots

media-downloader.png

media-downloader.png

media-downloader.png

media-downloader.png

Comments
  • Fails to download Youtube-DL on first run

    Fails to download Youtube-DL on first run

    hello, just seeing if im brain farting on something as when i run Media Downloader it errors when trying to download Youtube-DL, exact message it says is

    [media-downloader] Running in portable mode [media-downloader] Download path: C:/Users/Slider/Desktop/ytd [media-downloader] Start Downloading youtube-dl ... ... [media-downloader] Download Failed: TLS initialization failed [media-downloader] Checking installed version of ffmpeg [media-downloader] Found version: 4.3.2-2021-02-27-full_build-www.gyan.dev

    I tried the non portable version too and have same issue, i see no other issues posted regarding this so i feel like im just simply doing something wrong. Any help be appreciated thank you.

    opened by slider6996 20
  • missing wget and ffmpeg

    missing wget and ffmpeg

    Hi I compiled it for OS2 and use qt5 v5.15.2 and gcc 9.2.0 But when running the program i see in log:

    [media-downloader] ***************************************************** [media-downloader] To Disable These Checks, Do The Following:- [media-downloader] 1. Go To "Configure" Tab. [media-downloader] 2. Go To "General Options" Sub Tab. [media-downloader] 3. Uncheck "Show Version Info When Starting". [media-downloader] ***************************************************** [media-downloader] Failed to find executable "wget" [media-downloader] Error, executable to backend "wget" could not be found [media-downloader] Failed to find executable "ffmpeg" [media-downloader] Error, executable to backend "ffmpeg" could not be found [media-downloader] Failed to find executable "aria2c" [media-downloader] Error, executable to backend "aria2c" could not be found [media-downloader] Checking installed version of yt-dlp [media-downloader] Found version: 2022.03.08.1 [media-downloader] Checking installed version of youtube-dl [media-downloader] Found version: 2021.12.17 [media-downloader] Checking installed version of yt-dlp-ffmpeg [media-downloader] Found version: 2022.03.08.1

    Any idea?

    opened by TeLLie 17
  • Command line options

    Command line options

    I'm going to have a hard time explaining the problem, please take that into consideration. Fx 91- 102, Win 7, sp1, fullup,, x64, MD version without installation Using a script that works correctly in other cases, it stumbles on your program. The script loader can be taken here, the author is from ukraine, so offended at us and deleted his account. The script itself (post deleted, so - code):

    (this.contextmenuopenwith = {
                _eventlisteners: [],
                menupage: {},
                menulink: {},
                init(that) {
                    var attrimage = true; // true or false Add icons ("image" attribute) or not
                    var submenu = true; // true or false Add a submenu for items or not
                    var prelabpage = true; // Add "Open Page in" at the beginning;
                    var prelablink = true; //Add "Open link in" at the beginning;
                    // 1-й true или false - Whether to show the item on the page or not,
                    // 2-й true или false - Show item on links or not
                    //next - 'item ID', 'application name', 'application path', 'arguments separated by a space (what is in double quotes counts as one argument)', 'icon (optional for Windows OS).
                    var arrayWindows = [ // for Windows
                    //  [true, true, 'edge', 'Microsoft Edge', 'C:\\Windows\\explorer.exe', '"microsoft-edge:%OpenURI "', 'moz-icon://file://C:\\Windows\\SystemApps\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\MicrosoftEdge.exe?size=16'],
                    // [false, true, 'potplayer', 'PotPlayer', 'D:\\PotPlayerMini.exe', '%OpenURI /add'],
                    [false, true, 'potplayer64', 'PotPlayer 64', 'D:\\PotPlayer64\\PotPlayerMini64.exe', '%OpenURI /add'],
                    [true, true, 'usd', 'MediaDownloader', 'D:\\yt-dlp_MediaDownloader\\media-downloader.exe', '%OpenURI /a /u'],
                    ];
                    var arrayLinux = [ // for Linux
                        [true, true, 'smplayer', 'SMPlayer', '/usr/bin/smplayer', '%OpenURI', 'moz-icon://stock/smplayer?size=menu'],
                        [true, true, 'vlc', 'VLC', '/usr/bin/vlc', '%OpenURI', 'moz-icon://stock/vlc?size=menu'],
                        [true, true, 'uget', 'uGet', '/usr/bin/uget-gtk', '%OpenURI', 'moz-icon://stock/uget-icon?size=menu'],
                        [false, true, 'thunderbird', 'Thunderbird', '/usr/bin/thunderbird', '-compose "to=%OpenURI"', 'moz-icon://stock/thunderbird?size=menu'],
                        [true, true, 'youtube-dl', 'youtube-dl', '/usr/bin/konsole', '--hold --workdir ~/Загрузки/ -e "youtube-dl %OpenURI"', 'moz-icon://stock/youtube-dl?size=menu'], // если не KDE то konsole заменить на др. терминал и параметры соответственно.
                    ];
                    var arrayMacos = [ // for MacOS
                        [true, true, 'fde', 'Firefox Developer Edition', '/usr/bin/open', '-n -a "Firefox Developer Edition" --args %OpenURI', 'moz-icon://file:///Applications/Firefox\ Developer\ Edition.app?size=16'],
                        [true, true, 'mpv', 'MPV', '/usr/bin/open', '-n -a mpv --args %OpenURI', 'moz-icon://file:///Applications/mpv.app?size=16'],
                        [true, true, 'youtube-dl', 'youtube-dl', '/usr/bin/osascript', `-e "tell app %quotTerminal%quot to activate" -e "tell app %quotTerminal%quot to do script %quotcd ~/Downloads/ && youtube-dl '%OpenURI'%quot"`, 'moz-icon://file:///System/Applications/Utilities/Terminal.app?size=16'],
                    ];
    
                    var arrayOS, platform = AppConstants.platform, length;
                    if (platform == "win")
                        arrayOS = arrayWindows;
                    else if (platform == "linux")
                        arrayOS = arrayLinux;
                    else if (platform == "macosx")
                        arrayOS = arrayMacos;
                    else
                        return;
                    if (!(length = arrayOS.length))
                        return;
                    var addEventListener = this.addEventListener.bind(this);
                    var popup = document.querySelector("#contentAreaContextMenu");
                    var create = evt => {
                        if (evt.target != popup || gContextMenu.webExtBrowserType === "popup") return;
                        popup.removeEventListener("popupshowing", create);
                        var seppage = popup.querySelector("#popupwindow_ettoolong-menuitem-8") || popup.querySelector("#context-sep-selectall")// || popup.firstElementChild;
                        var seplink = popup.querySelector("#context-sep-open") || popup.querySelector("#context-sep-copylink")// || popup.firstElementChild;
                        var fragpage = document.createDocumentFragment(), fraglink = document.createDocumentFragment(), _prelabpage = "", _prelablink = "";
                        if (length == 1)
                            submenu = false;
                        if (!submenu) {
                            if (prelabpage)
                                _prelabpage = "Открыть страницу в ";
                            if (prelablink)
                                _prelablink = "Открыть ссылку в ";
                        }
                        arrayOS.forEach(item => {
                            var id = item[2], name = item[3], path = item[4], arg = !item[5] ? "" : item[5];
                            if (!id || !name || !path) return;
                            var iconpath = !item[6] ? (`moz-icon://file://${path}?size=16`) : item[6];
                            if (item[0]) {
                                let menuitem_0 = document.createXULElement("menuitem");
                                menuitem_0.id = `open-current-page-with-${id}`;
                                menuitem_0.className = "menuitem-iconic open-current-page-with-application";
                                menuitem_0.setAttribute("label", `${_prelabpage}${name}`);
                                menuitem_0.applicationpath = path;
                                menuitem_0.applicationarg = arg;
                                if (attrimage)
                                    menuitem_0.setAttribute("image", iconpath);
                                fragpage.append(menuitem_0);
                                addEventListener(menuitem_0, "command", function page(event) {
                                    try {
                                        var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                                        file.initWithPath(target.applicationpath);
                                        if (!file.exists() || !file.isExecutable()) return;
                                        arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
                                            if (/%OpenURI/g.test(sp)) {
                                                let uri = gBrowser.selectedBrowser.currentURI.displaySpec;
                                                try {
                                                    let _uri = ReaderMode.getOriginalUrl(uri);
                                                    if (_uri)
                                                        uri = Services.io.newURI(_uri).displaySpec;
                                                } catch(e) {}
                                                try {
                                                    uri = decodeURIComponent(uri);
                                                } catch(e) {}
                                                return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri);
                                            }
                                            return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"');
                                        }) : [];
                                        var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                                        process.init(file);
                                        process.runwAsync(arg, arg.length);
                                    } catch(e) {}
                                });
                            }
                            if (item[1]) {
                                let menuitem_1 = document.createXULElement("menuitem");
                                menuitem_1.id = `open-link-with-${id}`;
                                menuitem_1.className = "menuitem-iconic open-link-with-application";
                                menuitem_1.setAttribute("label", `${_prelablink}${name}`);
                                menuitem_1.applicationpath = path;
                                menuitem_1.applicationarg = arg;
                                if (attrimage)
                                    menuitem_1.setAttribute("image", iconpath);
                                fraglink.append(menuitem_1);
                                addEventListener(menuitem_1, "command", function link(event) {
                                    try {
                                        var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                                        file.initWithPath(target.applicationpath);
                                        if (!file.exists() || !file.isExecutable() || !window.gContextMenu?.linkURI?.displaySpec) return;
                                        arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
                                            if (/%OpenURI/g.test(sp)) {
                                                let uri = gContextMenu.linkURI.displaySpec;
                                                try {
                                                    let _uri = ReaderMode.getOriginalUrl(uri);
                                                    if (_uri)
                                                        uri = Services.io.newURI(_uri).displaySpec;
                                                } catch(e) {}
                                                try {
                                                    uri = decodeURIComponent(uri);
                                                } catch(e) {}
                                                return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri);
                                            }
                                            return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"');
                                        }) : [];
                                        var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                                        process.init(file);
                                        process.runwAsync(arg, arg.length);
                                    } catch(e) {}
                                });
                            }
                        });
                        that.unloadlisteners.push("contextmenuopenwith");
                        var funcpopupshowing, funcpopuphiding;
                        if (!submenu) {
                            seppage.after(fragpage);
                            seplink.before(fraglink);
                            funcpopupshowing = () => {
                                var link = gContextMenu.onLink || gContextMenu.onMailtoLink;
                                for(let arr of this._eventlisteners) {
                                    if (arr[2].name === "page")
                                   // Исходно
                                   //arr[0].hidden = link;
                                   // др. селекторы - gContextMenu(.onImage, .onCanvas, .onVideo, .onAudio)
                                     arr[0].hidden = link || gContextMenu.onTextInput || gContextMenu.isContentSelected;
                                    else if (arr[2].name === "link")
                                        arr[0].hidden = !link || gContextMenu.onTextInput;
                                }
                            };
                            funcpopuphiding = () => {
                                for(let arr of this._eventlisteners) {
                                    if (arr[1] === "command")
                                        arr[0].hidden = true;
                                }
                            };
                        } else {
                            if (fragpage.children.length) {
                                let menu = this.menupage = document.createXULElement("menu");
                                menu.id = "open-current-page-with-submenu";
                                menu.className = "menu-iconic open-current-page-with-application";
                                menu.setAttribute("label", "Открыть страницу в ...");
                                let menupopup = document.createXULElement("menupopup");
                                menupopup.append(fragpage);
                                menu.append(menupopup);
                                seppage.after(menu);
                            }
                            if (fraglink.children.length) {
                                let menu = this.menulink = document.createXULElement("menu");
                                menu.id = "open-link-with-submenu";
                                menu.className = "menu-iconic open-link-with-application";
                                menu.setAttribute("label", "Открыть ссылку в ...");
                                let menupopup = document.createXULElement("menupopup");
                                menupopup.append(fraglink);
                                menu.append(menupopup);
                                seplink.before(menu);
                            }
                            funcpopupshowing = () => {
                                var link = gContextMenu.onLink || gContextMenu.onMailtoLink;
                                // Здесь дублировать скрытие для контекстов
                                this.menupage.hidden = link || gContextMenu.onTextInput || gContextMenu.isContentSelected;
                                this.menulink.hidden = !link || gContextMenu.onTextInput;
                            };
                            funcpopuphiding = () => {
                                this.menupage.hidden = true;
                                this.menulink.hidden = true;
                            };
                        }
                        funcpopupshowing();
                        addEventListener(popup, "popupshowing", e => {
                            if (e.target != popup || gContextMenu.webExtBrowserType === "popup") return;
                            funcpopupshowing();
                        });
                        addEventListener(popup, "popuphiding", e => {
                            if (e.target != popup) return;
                            funcpopuphiding();
                        });
                    };
                    popup.addEventListener("popupshowing", create);
                },
                addEventListener(...arr) {
                    var elm = arr[0];
                    if (!elm)
                        return;
                    elm.addEventListener(...arr.slice(1));
                    this._eventlisteners.push(arr);
                },
                destructor() {
                    for(let arr of this._eventlisteners)
                        arr.shift().removeEventListener(...arr);
                    delete this._eventlisteners;
                }
    
    

    The problem is the following, any time I open your program, with parameters passed through the command line, the program opens without picking up my settings (dark theme, opens in light theme, language - opens in English) and does not accept parameters like -a -u [HREF]. I'm not a programmer, can you understand the problem and advise something? Not only are the command line parameters of interest here, but also why does it open without picking up the settings?

    opened by wvxwxvw 16
  • Worst audio

    Worst audio

    Hello, Media_Download is amazing and wonderful ! Thank you very much ! Please it will be great if there an option preset to choose by default to download the worst audio quality for a faster download, and possiblity to choosing the native audio quality "opus" or "m4a" without conversion to mp3, thank you very much !

    opened by trimechee 16
  • You-Get

    You-Get

    Hello, thank you for adding lux support, please it will be great also to add support for You-Get which" is a tiny command-line utility to download media contents (videos, audios, images) from the Web, in case there is no other handy way to do it."

    https://github.com/soimort/you-get

    opened by trimechee 15
  • Encrypted stream

    Encrypted stream

    Hello, i read this disucussion about donwload enrypted stream, ant it said : "No m3u8, but mpd.

    Your stream is encrypted. You will need keys to decrypt.

    yt-dlp --allow-u "mpd_url"

    https://forum.videohelp.com/threads/407535-Zee5-video-download

    Does Media-Donwloader include by default this command " --allow-u "mpd_url" to donwload encrypted streams ?

    opened by trimechee 13
  • Fix the GUI

    Fix the GUI

    Windows 7 x64 sp1, with all updates, without any patches and decorations,
    the standard zoom level is 100%,
    the most standard screen is FullHD.

    Due to the fact that the interface elements overlap each other, the program looks bad. For example, you have a highlight of the input fields at focus. Now let's see how it looks on your standard and first dark theme: 2022 01 27_210133 2022 01 27_210324 As you can see, the backlight is stupidly overlapped by neighboring fields and is visible only on one or two sides.
    And this is just one example, there are still a lot of problems due to this short arrangement of elements. Especially on dark themes.

    The first request: Please separate the fields and buttons away from each other, as is done in all standard interfaces.

    Now about the design themes:
    I have only the standard and first dark themes working. The rest look really bad. But that's not the point. I prefer to use dark themes, but your first dark theme cannot be used because it is high contrast.

    The second request: Please duplicate the first dark theme by changing the dark colors in the duplicate to more gray, and the text color, for example, to 'silver'. And let this become the fifth topic, since perhaps someone needs a high-contrast one, too, for example, those who have bad eyesight.

    opened by wvxwxvw 13
  • Os2

    Os2

    I just update the src to latest version on my laptop. But now I see that it cannot find ffmpeg, same as i had before. #issue 104

    Also It don't download the yt-dlp anymore. I see " QIODEVICE::read (Qnetwork replyhttpimpl): device not open"

    opened by TeLLie 12
  • Russian file names do not correctly in the UI.

    Russian file names do not correctly in the UI.

    From the command line, go to where yt-dlp.exe command is and then run the below command and then post the contents of "output.txt" file

    yt-dlp.exe -f 242+250 --newline https://www.youtube.com/watch?v=Gkz9F4GGxOs > output.txt
    
    opened by mhogomchungu 12
  • Playlist

    Playlist

    Hello, I had sent someone my beautiful sublime playlist which is the most beautiful playlist in the universe:

    https://www.youtube.com/playlist?list=PLCVfum9m6K6OkOnoRAzHnz5puRE4zVjWF

    then after a few minutes, I go to a youtube channel of a radio and a tv to choose and select some videos, Media-Downnloader normally detects the videos because I have activated "inspect the clipboard" and I use batch donwloader, I leave Media-Downloader to download and I do something else......the downloads end because I closed Media-Downloader because the downloads encountered some problems and I discover by opening the download folder that I downloaded incosniously dozens of videos from my playlist which contains 1700 videos because I forgot that I copied the link of the playlist and it was not my intention to download the videos from my playlist because I have already downloaded the audios of these recitations of the noble Quran in the past.....

    my request please: can we see the name of the videos we are going to download in Batch downloader before downloading them so we can realize that we are going to download a playlist, or is it possible that Media-Downloader displays a warning pop-up "you are about to download videos from a playlist that has 100 videos or 1000 videos, it can take a long time and youtube might temporarily ban your ip address", or tell batch donwloader to download playlist or just download a video if the video is included in a playlist, thank you very much !

    opened by trimechee 11
  • How to Build On Windows?

    How to Build On Windows?

    Helloi see instructions to build on linux, but is there a way to compile and build this on windows? I tried opening it up in Qt Creator but I get tons of compile errors. Any advice?

    opened by titus-shoats 11
  • [Request] Download path button on every tab with the list of prev used paths

    [Request] Download path button on every tab with the list of prev used paths

    Hi. Could you, please, add the download path button to each tab (Basic, Batch, Playlist) with the remembered drop-down list of the previously used paths and with the last used one selected?

    opened by iG8R 0
  • Chapters

    Chapters

    Hello, I think donwloading by chapters is more easy and comfortable from manually setting time range, it will be great to add option "split by Chapters "= after the download is complete, save the file by chapter and also add option "chapter lables = only download single chapter (will override the Time Range setting), thank you !

    opened by trimechee 0
  • Consider creating a makedeb script for Debian based distros

    Consider creating a makedeb script for Debian based distros

    Hi,

    if packaging application as Flatpak is not something you currently plan to do, consider perhaps creating a makedeb script: https://www.makedeb.org/

    And adding it to MPR: https://mpr.makedeb.org/

    This will automatically cover all Debian based distros, just like AUR covers all Arch based distros.

    opened by sbstn87 2
  • Hlsdl and m3u8

    Hlsdl and m3u8

    Hello, i find this tool : hlsdl : C program to download VoD HLS (.m3u8) files, i read that ffmpeg could have some problems with hls streams, so I think it may be a good idea, if this software is compatible with Media-Downloader to integrate it in order to avoid possible bugs with hls streams :

    https://github.com/selsta/hlsdl

    and also this tool : m3u8 which is Python m3u8 Parser for HTTP Live Streaming (HLS) Transmissions :

    https://github.com/globocom/m3u8

    opened by trimechee 1
  • Media downloader name confusion

    Media downloader name confusion

    Hello, i find software named "Mediadownloader" made by O7q, , it has almost the same name of Media-Downloader, may be Mr Francis should talk to the developoer of this software and ask him to change the name of his software to avoid confusion !

    https://github.com/o7q/MediaDownloader

    opened by trimechee 2
  • Sugesstion of new CLI software donwloaders and download accelerator

    Sugesstion of new CLI software donwloaders and download accelerator

    Hello, it's only suggestions, we are not asking to integrate them but just suggestions in case the CLI software used by our beloved Media-Donwloader are no longer updated so here are open-source alternatives :

    Terminal based YouTube player and downloader. No Youtube API key required.

    Run audio in VLC with no GUI

    https://github.com/iamtalhaasghar/yewtube

    https://github.com/mps-youtube/mps-youtube/issues/1191

    https://iamtalhaasghar.github.io/yewtube/

    Terminal based YouTube player and downloader

    Search and play audio/video Search tracks of albums by album title Search and import YouTube playlists Create and save local playlists Download audio/video Convert to mp3 & other formats (requires ffmpeg or avconv) View video comments Works with Python 3.x Works with Windows, Linux and Mac OS X Requires mplayer or mpv

    https://github.com/otisdog8/termitube

    HTTP(S) download manager that uses input/output completion ports (IOCP). it is a high-performance, multi-part download manager. You can Start, Pause, Stop, and Queue up to 100 downloads at a time. Each download can be split into 100 parts. That's 10,000 connections!

    https://erickutcher.github.io/#HTTP_Downloader

    opened by trimechee 5
Releases(2.8.0)
Owner
null
Free Media Player for Windows and Linux with Youtube support.

SMPLAYER SMPlayer is a free media player for Windows and Linux with Youtube support.

Ricardo 324 Dec 27, 2022
Jellyfin Desktop Client based on Plex Media Player

Jellyfin Media Player Based on (but not affiliated with) Plex Media Player. Please see: Corresponding web client: Repo Release API Docs in client-api.

Ian Walton 1.3k Dec 27, 2022
Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.

News Visual Studio 2013 is no longer supported As scheduled, Microsoft Visual Studio 2013 is no longer officially supported. Please upgrade to at leas

The Khronos Group 2.4k Jan 9, 2023
LLVM IR and optimizer for shaders, including front-end adapters for GLSL and SPIR-V and back-end adapter for GLSL

Licensing LunarGLASS is available via a three clause BSD-style open source license. Goals The primary goals of the LunarGLASS project are: Reduce the

LunarG, Inc. 153 Dec 8, 2022
A Flutter Youtube and Video Downloader

A Flutter Desktop GUI App of Youtube-dl which download video from Youtube, Facebook (both public and private)

superatom 21 Oct 10, 2022
Windows graphical interface for yt-dlp, designed as a simple YouTube downloader

ytdlp-interface This is a Windows graphical interface for yt-dlp, that is designed as a simple YouTube downloader. It doesn't download playlists, and

null 303 Jan 2, 2023
Project for CS100395, Tongji Univ. A simple compiler front-end for a subset of C.

ToyCC 项目简介 本项目来自Maoyao233,lhl322001,Amazonite合作完成的同济大学编译原理(CS100395)课程大作业的后端部分,针对C语言的一个子集,实现了简易的编译器前端,包括词法分析、语法分析、语义分析与中间代码生成步骤。程序可以生成LLVM IR,也可以单独演示词

null 26 Dec 16, 2022
Compiler Design Project: Simulation of front-end phase of C Compiler involving switch-case construct.

CSPC41 Compiler Design Project Assignment Compiler Design Project: Simulation of front-end phase of C Compiler involving switch-case construct. Using

Adeep Hande 1 Dec 15, 2021
Projeto pessoal: Obter a temperatura ambiente e através de um termistor ligado a um arduino e disponibilizar esses dados em tempo real via API NodeJS. No front-end os dados são acessados por uma interface em React JS.

INTEGRAÇÃO DA API COM OS DADOS DO ARDUINO FORNECIDOS PELO TERMISTOR Código Desenvolvido por Lucas Muffato. MATERIAIS 1 Placa de Arduino; 1 Cabo de con

Lucas Muffato 35 Aug 16, 2022
C++ front-end package manager for embedding and redistributing with native applications

Pacm Simple C++ package manager Homepage: https://sourcey.com/pacm Documentation: https://sourcey.com/libsourcey/api-pacm/ Dependencies: LibSourcey (b

Sourcey 84 Jun 5, 2022
Command line front-end to libpwquality

Command line front-end to libpwquality

Westermo Network Technologies 3 Feb 26, 2022
ML++ - A library created to revitalize C++ as a machine learning front end

ML++ Machine learning is a vast and exiciting discipline, garnering attention from specialists of many fields. Unfortunately, for C++ programmers and

marc 1k Dec 31, 2022
Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content.

This project is a Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content. The application decodes the h.264/5 compressed content using an HW accelerated decoder, the decoded YCbCr frames are processed with Vulkan Graphics and then presented via the Vulkan WSI.

NVIDIA DesignWorks Samples 132 Dec 15, 2022
WeNet is to close the gap between research and production end-to-end (E2E) speech recognition models,

WeNet is to close the gap between research and production end-to-end (E2E) speech recognition models, to reduce the effort of productionizing E2E models, and to explore better E2E models for production.

null 2.7k Jan 5, 2023
[RSS 2021] An End-to-End Differentiable Framework for Contact-Aware Robot Design

DiffHand This repository contains the implementation for the paper An End-to-End Differentiable Framework for Contact-Aware Robot Design (RSS 2021). I

Jie Xu 60 Jan 4, 2023
End to end test framework designed for Juce applications

JUCE End to End test framework What is it? This package provides a mechanism to end-to-end test a JUCE application Prerequisites CMake. Must be 3.18 o

Focusrite Audio Engineering Ltd. 58 Jan 6, 2023
BladeDISC - BladeDISC is an end-to-end DynamIc Shape Compiler project for machine learning workloads.

BladeDISC Introduction Overview Features and Roadmap Frontend Framework Support Matrix Backend Support Matrix Deployment Solutions Numbers of Typical

Alibaba 517 Jan 4, 2023
Free Media Player for Windows and Linux with Youtube support.

SMPLAYER SMPlayer is a free media player for Windows and Linux with Youtube support.

Ricardo 324 Dec 27, 2022
TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines.

TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines. It ensures pipeline interoperability and provides optimized media, and inference operations using Tengine Toolkit Inference Engine backend, across varied architecture - CPU, iGPU and VPU.

OAID 69 Dec 17, 2022
Kodi is an award-winning free and open source software media player and entertainment hub for digital media

website • docs • community • add-ons Welcome to Kodi Home Theater Software! Kodi is an award-winning free and open source software media player and en

Team Kodi 15k Jan 2, 2023