# e6dl

**["I don't care about any of this, just take me to the downloads"](https://github.com/tjhorner/e6dl/releases/latest)**

![](https://user-images.githubusercontent.com/2646487/54313480-b1170e80-4596-11e9-811f-d73f1ea13b99.gif)

This is a command line tool for downloading posts that match certain tags on e621 or e926.

It does basically the same thing as [this tool](https://www.npmjs.com/package/e6dl) except it was written in Go and the output is a lot less pretty.

It supports concurrently downloading posts, and you can set a maximum number of workers that should be downloading at a time.

I made this because I wanted to rewrite one of my previous projects in Go, so I decided to start with this one since it's a pretty small and simple command line tool that encapsulates a lot of concepts in the language (type definition, imports, goroutines, standard libraries, slices, to name a few).

## Installing

### Prebuilt Binaries

There is an install script available for Linux/macOS [here](https://github.com/tjhorner/e6dl/blob/master/install.sh). It automatically grabs the latest release (at the time of writing) and saves to `/usr/local/bin/e6dl`.

### From Source

Clone repo.

```bash
# Build e6dl then install it to /usr/local/bin
make install
```

You can also install it to a custom path of your choosing:

```bash
make install INSTALLPATH="/bin"
```

If you wanna get rid of it:

```bash
make uninstall
```

## Building

First, install Go.

Then just:

```bash
make build
```

`bin/e6dl` will magically appear. You can also just:

```bash
go run main.go
```

To distribute:

```bash
make dist
```

3 files will be spit out in the `dist` directory - one for Windows, one for macOS, and one for Linux.

You can also run `make dist-win`, `make dist-macos`, or `make dist-linux` to build them individually.

## Example

Here's a situation that uses every flag:

If you wanted to download a maximum of 20 posts with the tag `pokemon` in random order from e926 to the directory `./posts` with a maximum of 2 downloading at a time:

```bash
e6dl --tags "pokemon order:random" --out ./posts --limit 20 --concurrents 2 --sfw
```

## Usage

```
Usage of e6dl:
  --concurrents int
    	Maximum amount of concurrent downloads (default 5)
  --limit int
    	Maximum amount of posts to grab from e621 (default 10)
  --out string
    	The directory to write the downloaded posts to (default "dl")
  --sfw
    	Download posts from e926 instead of e621
  --tags string
    	Tags to search for
```