{"id":16715045,"url":"https://github.com/earlopain/foxtrove","last_synced_at":"2025-11-17T14:29:19.335Z","repository":{"id":46270948,"uuid":"403843160","full_name":"Earlopain/FoxTrove","owner":"Earlopain","description":"E6 Upload Helper","archived":false,"fork":false,"pushed_at":"2025-09-23T07:23:19.000Z","size":7088,"stargazers_count":7,"open_issues_count":7,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-23T09:22:03.141Z","etag":null,"topics":["e621","iqdb","rails","reverse-image-search","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Earlopain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-07T04:46:34.000Z","updated_at":"2025-09-23T07:23:23.000Z","dependencies_parsed_at":"2023-09-21T21:51:44.034Z","dependency_job_id":"641fa803-7958-4596-8b5c-c90bd6178843","html_url":"https://github.com/Earlopain/FoxTrove","commit_stats":null,"previous_names":["earlopain/foxtrove"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Earlopain/FoxTrove","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Earlopain%2FFoxTrove","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Earlopain%2FFoxTrove/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Earlopain%2FFoxTrove/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Earlopain%2FFoxTrove/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Earlopain","download_url":"https://codeload.github.com/Earlopain/FoxTrove/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Earlopain%2FFoxTrove/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284896827,"owners_count":27081184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-17T02:00:06.431Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["e621","iqdb","rails","reverse-image-search","ruby"],"created_at":"2024-10-12T21:08:11.367Z","updated_at":"2025-11-17T14:29:19.319Z","avatar_url":"https://github.com/Earlopain.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FoxTrove\n\n[![codecov](https://codecov.io/github/Earlopain/FoxTrove/graph/badge.svg?token=JK5X2YBOHK)](https://codecov.io/github/Earlopain/FoxTrove)\n\nA content aggregator for a variety of sites to make uploading to e6 easier. Created because Saucenao doesn't support all the sites I want it to.\n\nYou provide links where the artist is uploading their content to. The content will then be scraped of those sites and put into iqdb (a reverse image search software). It also checks e6' version of iqdb to provide you information on if submissions are already uploaded, or if the current upload has a better version available elsewere.\n\nIt's also useful to clean up `source:none artist_name` searches.\n\n![Larger image search for kenket](screenshots/1.png)\n\nImage dimensions and filesize are displayed, links to the original submission, the direct link of the downloaded file, and a link to start reverse image search for similar already scraped files.\n\n![Larger submission example](screenshots/2.png)\n\nThe current upload on e6 is only 0.3x of the dimensions from the twitter post. It's also 1.83MB larger, a prime example for replacement. Please check manually if the file is actually superior, just because the filessize is greater doesn't mean that the visual quality is too. \n\n![Non-uploaded submissions from kenket](screenshots/3.png)\n\nYou can also search for non-uploaded submission for artists. How well this works depends on the artist and page. Some artists don't seperate their personal and art accounts and post irrelevant content which would also appear in this list.\n\n## Currently supported sites\n\u003c!--- Automatically linted. You can add notes in brackets (see tumblr) --\u003e\n\u003c!--- sites:start --\u003e\n* \u003cimg src=\"public/icons/38-artfight.png\" width=\"16px\" height=\"16px\"\u003e Art Fight\n* \u003cimg src=\"public/icons/37-artconomy.png\" width=\"16px\" height=\"16px\"\u003e Artconomy\n* \u003cimg src=\"public/icons/5-artstation.png\" width=\"16px\" height=\"16px\"\u003e ArtStation\n* \u003cimg src=\"public/icons/30-baraag.png\" width=\"16px\" height=\"16px\"\u003e Baraag\n* \u003cimg src=\"public/icons/50-bluesky.png\" width=\"16px\" height=\"16px\"\u003e Bluesky\n* \u003cimg src=\"public/icons/48-cohost.png\" width=\"16px\" height=\"16px\"\u003e Cohost (via Wayback Machine)\n* \u003cimg src=\"public/icons/33-commishes.png\" width=\"16px\" height=\"16px\"\u003e Commishes\n* \u003cimg src=\"public/icons/4-deviantart.png\" width=\"16px\" height=\"16px\"\u003e DeviantArt\n* \u003cimg src=\"public/icons/1-furaffinity.png\" width=\"16px\" height=\"16px\"\u003e FurAffinity\n* \u003cimg src=\"public/icons/34-furrynetwork.png\" width=\"16px\" height=\"16px\"\u003e FurryNetwork\n* \u003cimg src=\"public/icons/2-inkbunny.png\" width=\"16px\" height=\"16px\"\u003e Inkbunny\n* \u003cimg src=\"public/icons/46-itaku.png\" width=\"16px\" height=\"16px\"\u003e Itaku\n* \u003cimg src=\"public/icons/11-newgrounds.png\" width=\"16px\" height=\"16px\"\u003e Newgrounds\n* \u003cimg src=\"public/icons/51-omorashi.png\" width=\"16px\" height=\"16px\"\u003e Omorashi\n* \u003cimg src=\"public/icons/29-pawoo.png\" width=\"16px\" height=\"16px\"\u003e Pawoo\n* \u003cimg src=\"public/icons/19-piczel.png\" width=\"16px\" height=\"16px\"\u003e Piczel\n* \u003cimg src=\"public/icons/7-pixiv.png\" width=\"16px\" height=\"16px\"\u003e Pixiv\n* \u003cimg src=\"public/icons/10-reddit.png\" width=\"16px\" height=\"16px\"\u003e Reddit\n* \u003cimg src=\"public/icons/3-sofurry.png\" width=\"16px\" height=\"16px\"\u003e Sofurry\n* \u003cimg src=\"public/icons/45-trello.png\" width=\"16px\" height=\"16px\"\u003e Trello\n* \u003cimg src=\"public/icons/9-tumblr.png\" width=\"16px\" height=\"16px\"\u003e Tumblr ([see notes](#tumblr))\n* \u003cimg src=\"public/icons/0-twitter.png\" width=\"16px\" height=\"16px\"\u003e Twitter\n* \u003cimg src=\"public/icons/8-weasyl.png\" width=\"16px\" height=\"16px\"\u003e Weasyl\n\u003c!--- sites:stop --\u003e\n\n### Tumblr\n\nTumblr doesn't expose the full resolution image through normal means. Getting full resolution on tumblr is a bit more compicated. Here's what you need to do, and what is done for you. Manual steps are marked with (*)\n1. Reblog every post of the blog\n1. (*) Download an archive of your blog\n1. (*) Upload the archive through the \"Archive Importer\"\n1. (*) Remove drafts from your blog with the [Mega-Editor](https://www.tumblr.com/mega-editor/draft/)\n1. Import full resolution files from the uploaded archive\n\nThe first step starts when you add a tumblr url to an artist. Instead of downloading the image like all other scrapers, it reblogs them.\n\n## Captchas\n\nA few sites throw captchas at you when trying to login through an automated browser. You will need to solve these captchas manually. Click on the `Selenium` link and connect to see what is happening inside the automated browser. Solve captchas as needed when adding artist urls or enqueuing new updates.\n\n## Configuration\n\nA few scraper require credentials to work, you can configure them through the web UI under the `Config` header link.\n\n## How do I actually use this?\nThe following software is required to get started:\n * Latest version of Docker ([download](https://docs.docker.com/get-docker))\n * Latest version of Docker Compose ([download](https://docs.docker.com/compose/install))\n * Git ([download](https://git-scm.com/downloads))\n\n### Windows users\n\nInstall a WSL distribution, enable WSL2, and clone the project inside there. Executing docker inside WSL will still work, without directly accessing the host filesystem. This will give you a significant performance boost.\n\n### Installation\n\n1. Clone the repo with `git clone https://github.com/Earlopain/FoxTrove.git`.\n1. `cd` into the repo.\n1. `cp .env.sample .env` and fill out the necessary environment variables.\n1. Build the docker image with `docker compose build`.\n1. Run `docker compose run --rm foxtrove bin/setup`.\n1. Run `docker compose up`. The container is now available at `http://localhost:9000`. A few config options are mandatory, you will be notified of them when accessing the site. See [Configuration](#configuration) on how to set them.\n\nThis project is only meant to run locally on your machine. You may host it somewhere and make it accessible to others, but be aware that there are no user accounts or fine grained permissions. Everyone can do anyhting.\n\n### Development tools\n\nThe compose file contains services to easily run some developments tools:\n* `docker compose run --rm tests`\n* `docker compose run --rm rubocop`\n\nYou can pass addition parameters like individual test files or `-a` for rubocop simply by appending it to the command. I suggest you make an alias for these. You may also run these commands locally, since docker does add a fair bit of startup overhead.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fearlopain%2Ffoxtrove","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fearlopain%2Ffoxtrove","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fearlopain%2Ffoxtrove/lists"}