Server and bookmarklet to download files via youtube-dl directly from your browser

Overview

gropple

A web service and bookmarklet to download videos with a single click.

Screencast

Pre-requisites

  • a passing familiarity with the command line
  • youtube-dl (plus any of its required dependencies, like ffmpeg)
  • golang compiler (if you'd like to build from source)

Build

go build

Binaries

Binaries are available at https://github.com/tardisx/gropple/releases

Running

gropple -port 6283 -address http://hostname:6283 -path /downloads

With no arguments, it will listen on port 6283 and use an address of 'http://localhost:6283'.

The address must be specified so that the bookmarklet can refer to the correct host if it is not running on your local machine. You may also need to specify a different address if you are running it behind a proxy server or similar.

Using

Bring up http://localhost:6283 (or your chosen address) in your browser. You should see a link to the bookmarklet at the top of the screen, and the list of downloads (currently empty).

Drag the bookmarklet to your favourites bar, or otherwise bookmark it as you see fit.

Whenever you are on a page with a video you would like to download, simply click the bookmarklet.

A popup window will appear, the download will start on the your gropple server and the status will be shown in the window.

You may close this window at any time without stopping the download, the status of all downloads is available on the index page.

Using an alternative downloader

The default downloader is youtube-dl. It is possible to use a different downloader via the -dl-cmd command line option.

While gropple will use your PATH to find the executable, you may also want to specify a full path instead.o

So, for instance, to use youtube-dlc instead of youtube-dl and specify the full path:

gropple -dl-cmd /home/username/bin/youtube-dlc

Note that this is only the path to the executable. If you need to change the command arguments, see below.

Changing the youtube-dl arguments

The default arguments passed to youtube-dl are:

  • --newline (needed to allow gropple to properly parse the output)
  • --write-info-json (optional, but provides information on the download in the corresponding .json file)
  • -f and bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best (choose the type of video youtube-dl will download)

These are customisable on the command line for gropple. For example, to duplicate these default options, you would do:

gropple -dl-args '--newline' -dl-args '--write-info-json' -dl-args '-f' -dl-args 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best

TODO

Many things. Please raise an issue after checking the currently open issues.

Comments
  • adding an -o & an

    adding an -o & an "%(title)s - %(id)s.%(ext)s" argument failes

    if i add extra arguments to name the outputfile as i like it to become, somehow the naming argument get f*d over:

    i tried adding the following commands through the config.htm-screen and directly in the config.yml file - -o - "%(title)s - %(id)s.%(ext)s"

    this has to be capsulated in double quotes as i'm on Windows (and i'm sure Linux will go broke on it as well) as else the space behind %(title)s will cause '-' to be seen as a next commandline option which will make the full youtube-dl.exe ... command faulty

    however "%(title)s - %(id)s.%(ext)s" becomes "\"%(title)s - %(id)s.%(ext)s\"" if i go through the config-screen and for the next downloads with that profile the file(s) get a starting and trailing # around it. imho that somehow comes from the \ being added.

    if i save it directly into the config.yml as such the double quotes get stripped on reading the file in config.go and that makes the full commandline fail for the 1st stated reason (no double quotes = spaces cause the '-' to be seen as next commandline option).

    if i try to use single quotes around it making it: '"%(title)s - %(id)s.%(ext)s"' (singlequote, double quote ... double, single) it again excapes the double quotes on reading the configfile, resulting again in the added #'s at the start and finish of the full filename(s) e.g.: #name - id.mp4#

    if i try the other way around: "'%(title)s - %(id)s.%(ext)s'" (double quotes on the outside, single qoutes on the inside), it keeps the single quotes and strips the qouble quotes, but the resulting filename also has those single quotes at start and finish e.g.: 'name - id.mp4'

    The command i hope to get (with the default and other args) is youtube-dl.exe -o "%(title)s - %(id)s.%(ext)s" <url> which is according to the youtube-dl readme a correct optionline with a resulting filename: name - id.mp4 without any # or ' around that.

    anyone having an idea how to tackle this?

    opened by soulmaestro 4
  • How do I stop a download?

    How do I stop a download?

    Just trying this out. Looks nice, but how to stop a download? I went to a youtube page with lots of videos listed and started a download and gropple started to download all the videos. Had to terminate it to stop it. I have another site I use that lists a whole bunch of videos and normally when I click one it starts downloading. How do I do that with Gropple (only select one of many)?

    opened by tyeeman 4
  • No popup on certain sites

    No popup on certain sites

    On some sites the popup doesn't show up while Youtube and various other sites work perfectly fine.

    I'm using the latest version of Chrome 95.0.4638.54. No Ad blocker, no errors in the console (Chrome / F12)

    Some examples where it doesn't work: https://www.pornhub.com/ https://de.spankbang.com/

    Would highly appreciate if someone could look into this as gropple seems to be the perfect solution for my needs.

    opened by ghost 4
  • Bump golang.org/x/mod from 0.5.1 to 0.6.0

    Bump golang.org/x/mod from 0.5.1 to 0.6.0

    Bumps golang.org/x/mod from 0.5.1 to 0.6.0.

    Commits
    • b3066c3 go.mod: update golang.org/x dependencies
    • e3c1277 go.mod: update to tagged x/tools version
    • aac77cd all: fix a few function names on comments
    • 2666ed6 go.mod: ignore cyclic dependency for tagging
    • 2adab6b zip: expand logging and use t.TempDir and t.Cleanup in test helpers
    • 02c9913 sumdb: remove redundant type conversion
    • 8f535f7 sumdb/note: fix some typos
    • ed83ed6 modfile: remove duplicate words from comments
    • f994a2a zip: set PWD consistently for commands in subdirectories
    • 046e8b3 modfile: improve error message for replace with '@' in path
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • improve log processing to note combined files

    improve log processing to note combined files

    For example:

    [youtube] FTQbiNvZqaY: Downloading webpage
    [info] Writing video description metadata as JSON to: Toto - Africa (Official HD Video)-FTQbiNvZqaY.info.json
    [download] Destination: Toto - Africa (Official HD Video)-FTQbiNvZqaY.f137.mp4
    [download]   0.0% of 48.45MiB at 659.38KiB/s ETA 01:16
    [download]   0.0% of 48.45MiB at  1.76MiB/s ETA 00:27
    [download]   0.0% of 48.45MiB at  3.92MiB/s ETA 00:12
    ...
    [download]  96.9% of 48.45MiB at  3.94MiB/s ETA 00:00
    [download] 100.0% of 48.45MiB at  4.18MiB/s ETA 00:00
    [download] 100% of 48.45MiB in 00:08
    [download] Destination: Toto - Africa (Official HD Video)-FTQbiNvZqaY.f140.m4a
    [download]   0.0% of 4.19MiB at 298.12KiB/s ETA 00:14
    [download]   0.1% of 4.19MiB at 856.97KiB/s ETA 00:05
    ...
    [download]  95.4% of 4.19MiB at  5.96MiB/s ETA 00:00
    [download] 100.0% of 4.19MiB at  5.99MiB/s ETA 00:00
    [download] 100% of 4.19MiB in 00:00
    [ffmpeg] Merging formats into "Toto - Africa (Official HD Video)-FTQbiNvZqaY.mp4"
    Deleting original file Toto - Africa (Official HD Video)-FTQbiNvZqaY.f137.mp4 (pass -k to keep)
    Deleting original file Toto - Africa (Official HD Video)-FTQbiNvZqaY.f140.m4a (pass -k to keep)
    

    We should remove the two deleted files from the list as they appear in the log, and add the "Merging" filename.

    opened by tardisx 0
  • Bump golang.org/x/mod from 0.5.1 to 0.7.0

    Bump golang.org/x/mod from 0.5.1 to 0.7.0

    Bumps golang.org/x/mod from 0.5.1 to 0.7.0.

    Commits
    • 7c05a44 sumdb/note: remove dependency on golang.org/x/crypto/ed25519
    • b3066c3 go.mod: update golang.org/x dependencies
    • e3c1277 go.mod: update to tagged x/tools version
    • aac77cd all: fix a few function names on comments
    • 2666ed6 go.mod: ignore cyclic dependency for tagging
    • 2adab6b zip: expand logging and use t.TempDir and t.Cleanup in test helpers
    • 02c9913 sumdb: remove redundant type conversion
    • 8f535f7 sumdb/note: fix some typos
    • ed83ed6 modfile: remove duplicate words from comments
    • f994a2a zip: set PWD consistently for commands in subdirectories
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Allow selective downloads of videos in a playlist

    Allow selective downloads of videos in a playlist

    See comments in https://github.com/tardisx/gropple/issues/10#issuecomment-1004507750

    This could be done with the youtube-dl options that let you extract the playlist videos.

    opened by tardisx 0
Releases(v0.5.5)
Owner
Justin Hawkins
Justin Hawkins
Self-hosted video-hosting website and video archival manager for Niconico, Bilibili, and Youtube

Self-hosted video-hosting website and video archival manager for Niconico, Bilibili, and Youtube

null 793 Jan 1, 2023
66 is two player game played with playing cards and from now on you can play it from browser with your friends.

altmis-alti 66 is two player game played with playing cards and this project provides multiplayer game space from browser. How to run? Clone the proje

Cem Asma 1 Feb 1, 2022
📔 Journal helps you manage multiple journals with ease from the comfort of your terminal, web browser or API client.

Journal helps you manage multiple journals with ease from the comfort of your terminal, web browser or API client. You can import/export journals as horcruxes and set simple customizations for layout, theme, and keybindings.

Paul Ebose 3 Sep 14, 2022
goof is a woof written in go - share files via a simple httpd

#goof - share files through HTTP protocol goof (Go Offer One File) is a very simple tool to send and receive files on your local LAN. Features include

Fredrik Steen 14 Oct 4, 2022
Uploads data to the Storj ecosystem and tries to download induvidual pieces from different servers to measure latency

Storj longtail This application uploads data to the Storj ecosystem and tries to download induvidual pieces from different servers to measure latency.

Elek, Márton 0 Oct 28, 2021
Hajimari is a beautiful & customizable browser startpage/dashboard with Kubernetes application discovery.

Hajimari ?? ...The beginning of a pleasant experience Features Web search bar Dynamically list apps discovered from Kubernetes ingresses Support for n

Toboshii Nakama 515 Jan 4, 2023
Preview tar.gz in the browser

Preview tar.gz in the browser

null 0 Dec 14, 2021
Web terminal - A (unsafe) technical demo to export a shell to web browser

Web Terminal A (unsafe) technical demo to export a shell to web browser. This pr

null 67 Dec 27, 2022
urlhunter is a recon tool that allows searching on URLs that are exposed via shortener services such as bit.ly and goo.gl.

a recon tool that allows searching on URLs that are exposed via shortener services

Utku Sen 1.3k Jan 7, 2023
REST API written in GO with PostgreSQL and Nginx Proxy + Certbot Let's Encrypt HTTPS certificates + Graphical Frontend in PHP. Deployed via docker-compose.

SSOA-PT REST APP Services Backend: REST API in Go Database: PostgreSQL Web Proxy: Nginx Let's Encrypt HTTPS certificates with certbot Frontend: PHP Ap

null 0 Mar 19, 2022
Handles file uploads & organises files based on your database entities.

Handles file uploads & organises files based on your database entities.

Joe Gasewicz 3 Nov 22, 2022
A self-hosted golang application that listens for Terraform pull request events via webhooks.

Atlantis Terraform Pull Request Automation Resources What is Atlantis? What does it do? Why should you use it? Stargazers over time Resources How to g

null 0 Dec 9, 2021
A blog system implemented via golang.

goblog functions work as a blog site read/write blogs signup/signin/logout vote with stars 1~5 user admin: add ranks to users: bronze, silver, gold wo

彭 0 Jan 5, 2022
Account Generator Bot, written in GoLang via gotgbot library

Account Generator Bot Account Generator Bot, written in GoLang via gotgbot library. Variables Env Vars - BOT_TOKEN - Get it from @BotFather CHANNEL_ID

Dileepa_Malshan 0 Dec 28, 2021
An easy, fluent way of building URLs via chainable methods written in Go(lang)

Burl - a fluent URL builder Burl provides an easy, fluent way of building URLs via chainable methods. How to install go get github.com/mr-cryka/burl Q

Daniel Krajka 0 Feb 5, 2022
Store files in Telegram messages for free and access them from a modern Web UI

Telegram Storage Store files in Telegram messages for free and access them in a nice web UI. Telegram allows to store files (of max 2GB each) for a un

Jack 30 Jan 4, 2023
One-stop shop for english-translated licensed hentai manga and doujins, beat your meat in peace, without any bullshit and drama attached to it.

koushoku Source code of site [redacted] for those who are willing to run their own instance. How it serve and index the archives Archives and its file

rs 43 Jan 2, 2023
An application for generating Microsoft Word resumes from JSON Resume data files

ResumeFodder NOTE: Primary development has moved over to GitLab: https://github.com/andrzejressel/ResumeFodder. If you're reading this on GitHub, then

​Andrzej Ressel 1 Nov 25, 2021
A cross platform single binary tool to work with draw io files

SNIPO SNIPIO is a cross platform single binary tool to work with draw io files With snipio you can do the following operations: list all layers in a d

Felix Becker 3 Jan 7, 2023