# gemini-dl CLI batch downloader for [Gemini protocol](https://geminiprotocol.net), inspired by `wget` and `yt-dlp` tools At this moment, project under development, some [features](#features) already implemented and testing ([feedback](https://github.com/YGGverse/gemini-dl/issues) | [PR](https://github.com/YGGverse/gemini-dl/pull)) ## Interface ![gemini-dl](https://github.com/YGGverse/gemini-dl/assets/108541346/94a494de-62fd-4ba6-85f9-a3a238cc9cb9) ## Components * [gemini-php](https://github.com/YGGverse/gemini-php) - Client for Gemini protocol * [gemtext-php](https://github.com/YGGverse/gemtext-php) - Parser for Gemtext * [net-php](https://github.com/YGGverse/net-php) - Network toolkit for URL operations * [php-cli-colors](https://github.com/mikeerickson/php-cli-colors) - CLI colors ## Features * [x] Grab single URL or `--crawl` entire capsule * [x] Multiple MIME types download (e.g. inline images and other media) * [x] Detailed crawler log for every request + totals * [ ] Flexible options * [x] Custom `--delay` between requests * [x] Custom `--index` filename for directories * [x] Custom storage location * [x] Filesystem * [ ] FTP * [x] Optional links replacement for local navigation * [x] Relative (default) * [x] Absolute (`--absolute`) * [x] Original (`--keep`) * [x] `--match` regex URL * [x] `--unique` snap version or sync with existing copy * [x] Configurable redirect levels to `--follow` * [ ] Document size limit to download ## Environment ``` bash apt install git composer php-fpm php-mbstring ``` ## Install * `git clone https://github.com/YGGverse/gemini-dl.git` * `cd gemini-dl` * `composer update` * `chmod +x src/gemini-dl.php` _(for direct execution only)_ ## Usage ``` bash src/gemini-dl.php --source gemini://.. --target /path/to/download ``` * alternatively, launch with specified php version `/path/to/php src/gemini-dl.php` ### Options ``` bash # Required -s, --source - string, gemini protocol address -t, --target - string, absolute path to destination folder # Optional -a, --absolute - no value, links to absolute filepath (ignored on --keep), disabled by default -c, --crawl - no value, crawl document links (entire capsule download), disabled by default -d, --delay - integer, pause between requests to prevent abuse (seconds), 1 by default -f, --follow - integer, follow redirects on --crawl, 0 by default -i, --index - string, index filename of directory listing, index.gmi by default -h, --help - no value, show available commands -k, --keep - no value, keep original links (--crawl mode only), disabled by default -m, --match - string, collect links match regex rule, /.*/ by default -r, --raw - no value, include meta headers (--keep option ignored), disabled by default -u, --unique - no value, append snap version as folder timestamp, disabled by default ``` * show in CLI: `gemini-dl.php --help`