Furaffinity Projects
9 years ago
10/14/16 - some scripts for the beta theme may be broken for a little bit. I'll give a few days for the changes to settle and begin to fix what's broken.
I always find there's something I can add to Furaffinity to improve my experience. That may be good or bad, but it gives me interesting problems to solve. Since I've accumulated a handful of projects I'm going to use this journal to keep a list of projects and the current status on them.
Gallery Scraper
About: Assists in the downloading of galleries including Scraps, favorites, and Gallery. Get submission sources for an entire gallery or a set range of pages through the downloader interface. Can also output submissions and relevant metadata (keywords, title, artist, description, rating, and categories) as JSON which can be used with my lightroom plugin.
Status: Functional as is, but I'm in the midst of a rewrite so I don't have to look at ugly code while adding new features like only scraping new submissions added to a gallery since last scrape. I'm writing it so I can hopefully reuse a lot of the code for other image galleries. Deviantart will be next. I might also turn this into a browser extension so images can be downloaded directly. It'd be available for firefox and chrome since I'll likely use firefox's Web Extensions which is largely compatible with chrome.
Link: https://openuserjs.org/scripts/Arte.....allery_Scraper
Github: https://github.com/Adidea/Gallery-T.....master/Scraper
Lightroom Plugin - Gallery Metadata
About: Takes a JSON file generated by the gallery scraper and applies metadata to matching filenames in a catalog.
Status: I've been using it for a while and I haven't noticed any issues.
Link: https://github.com/Adidea/Gallery-T.....ghtroom-plugin
Hotkeys
About: Adds various customizable Hotkeys (keyboard shortcuts) to Furaffinity.
Status: Not working on them, but could use a rewrite. I try to maintain them since I use this regularly.
Link: https://openuserjs.org/scripts/Artex/FA_Hotkeys
search parameters
About: Adds search parameters to your address bar when preforming a search. This enables you to share searches including page number. Could be used as a bookmark to track a set of tags.
Status: Works on the Beta Theme at the moment, but will easily break if any formatting changes.
Link: https://openuserjs.org/scripts/Artex/FA_Search_URL
Manage watching
About: Tools to help out with keeping track of artists you watch or don't watch.
- Find moved artists: checks each user page for variations of "Moved" and displays matches.
- Find artists I don't watch: Sometimes I come across an artist who creates something I like, but for one reason or another I don't watch them. People and their art change overtime, so It'd be cool the check up on these artists. This would go through your favorites and find artists who aren't on your watch list. Not exactly light weight, but I'd only need to get the information once. Could also be used with the JSON generated from the Gallery Scraper.
- Save watch list: generate a complete list of artists you watch. Could also include links under "contact information" to provide other places to find the artist. I see this useful if you either leaving Furaffinity or if Furaffinity one day is shutdown. Considering how the site is managed I wouldn't be surprised.
- Watch a watch list: Takes a list of artists and automagically watches them. Handy if your moving accounts.
Status: I have a basic implementation of the 2nd and 3rd bullet points.
Userstyles
I've written a couple of stylesheets for FA's classic theme, but I don't really maintain them anymore unless someone asks me to fix something.
Link: https://userstyles.org/users/204536
I always find there's something I can add to Furaffinity to improve my experience. That may be good or bad, but it gives me interesting problems to solve. Since I've accumulated a handful of projects I'm going to use this journal to keep a list of projects and the current status on them.
Gallery Scraper
About: Assists in the downloading of galleries including Scraps, favorites, and Gallery. Get submission sources for an entire gallery or a set range of pages through the downloader interface. Can also output submissions and relevant metadata (keywords, title, artist, description, rating, and categories) as JSON which can be used with my lightroom plugin.
Status: Functional as is, but I'm in the midst of a rewrite so I don't have to look at ugly code while adding new features like only scraping new submissions added to a gallery since last scrape. I'm writing it so I can hopefully reuse a lot of the code for other image galleries. Deviantart will be next. I might also turn this into a browser extension so images can be downloaded directly. It'd be available for firefox and chrome since I'll likely use firefox's Web Extensions which is largely compatible with chrome.
Link: https://openuserjs.org/scripts/Arte.....allery_Scraper
Github: https://github.com/Adidea/Gallery-T.....master/Scraper
Lightroom Plugin - Gallery Metadata
About: Takes a JSON file generated by the gallery scraper and applies metadata to matching filenames in a catalog.
Status: I've been using it for a while and I haven't noticed any issues.
Link: https://github.com/Adidea/Gallery-T.....ghtroom-plugin
Hotkeys
About: Adds various customizable Hotkeys (keyboard shortcuts) to Furaffinity.
Status: Not working on them, but could use a rewrite. I try to maintain them since I use this regularly.
Link: https://openuserjs.org/scripts/Artex/FA_Hotkeys
search parameters
About: Adds search parameters to your address bar when preforming a search. This enables you to share searches including page number. Could be used as a bookmark to track a set of tags.
Status: Works on the Beta Theme at the moment, but will easily break if any formatting changes.
Link: https://openuserjs.org/scripts/Artex/FA_Search_URL
Manage watching
About: Tools to help out with keeping track of artists you watch or don't watch.
- Find moved artists: checks each user page for variations of "Moved" and displays matches.
- Find artists I don't watch: Sometimes I come across an artist who creates something I like, but for one reason or another I don't watch them. People and their art change overtime, so It'd be cool the check up on these artists. This would go through your favorites and find artists who aren't on your watch list. Not exactly light weight, but I'd only need to get the information once. Could also be used with the JSON generated from the Gallery Scraper.
- Save watch list: generate a complete list of artists you watch. Could also include links under "contact information" to provide other places to find the artist. I see this useful if you either leaving Furaffinity or if Furaffinity one day is shutdown. Considering how the site is managed I wouldn't be surprised.
- Watch a watch list: Takes a list of artists and automagically watches them. Handy if your moving accounts.
Status: I have a basic implementation of the 2nd and 3rd bullet points.
Userstyles
I've written a couple of stylesheets for FA's classic theme, but I don't really maintain them anymore unless someone asks me to fix something.
Link: https://userstyles.org/users/204536
FA+

It's still working for me, but it's quite possible I'm using a javascript feature not available in FF 3.6. I usually make sure it's supported on the more recent versions of firefox and chromium, but not for versions that old.
Looking through compatibility charts I see some features of XMLHttpRequest which I use to fetch pages as documents to parse that may not exist in that version, though I see them in the w3c specs for xhr1. Still the button should still be inserted...
Ooh, okay! So the useCapture parameter of addEventListener wasn't optional until firefox 6. That could be it and easy to fix. To be sure can you look at the output in the console when on a gallery page?
Under WARNINGS:
Warning: Use of captureEvents() is deprecated. To upgrade your code, use the DOM 2 addEventListener() method. For more help http:// developer.mozilla.org / en/docs/DOM:element.addEventListener
Source File: https://www.furaffinity.net/gallery/artex./
Line: 0
Under ERRORS:
Error: insertAt is undefined
Source File: {my profile}/gm_scripts/FA_Gallery_Scraper/FA_Gallery_Scraper.user.js
Line: 458
If this is not what you were requesting, please regard me a noob and step list me through it. (optional: DOM Inspector is loaded, but it's old/limited.)
I've had similar concerns which is why I wrote it. I just don't see FA being around forever under current management. I also like having conveniently organized offline archive of artwork I can look through whenever.
The organizing part is what I'm trying to do now and I have absolutely no clue on how I'm gonna go about doing that.
Then ta-da, I have a searchable and organized library of images. Not perfect as there's some garbage tags to clean up from artists misusing the tag field to make sentences and some people just don't tag. If that's something your interested in doing (if you have access to lightroom) I can share the plugin. Otherwise there's the manual way in which case I can recommend Daminion as a pretty good free tool for that. Better than lightroom in regards to tagging and categorizing. I mainly went with lightroom because I can write plugins to automate tagging and stuff.... and the lovely UI.
I almost thought I figured a way of doing it automatically with exiftool cause it supports importing and exporting metadata to and from a JSON database file. Unfortunately, it doesn't like the JSON file that's created from the Gallery Scraper and gives me a "no source file" error.
[{
"SourceFile" : "/blah.jpg/",
"xmp:creator" : "SomeArtist",
"xmp:title" : "ART",
"xmp:description : "art art art",
"iptc:keywords" : ["I think", "this", "is", "the", "right", "field name", "for", "keywords?"]
},
{
"SourceFile" : "/blah2.jpg/",
"xmp:creator" : "SomeArtist",
"xmp:title" : "GREAT ART",
"xmp:description : "look at my art pls",
"iptc:keywords" : ["good", "art"]
}]
[{
"SourceFile": "C:/Users/Username/folder/image.png",
"ExifToolVersion": 10.25,
"FileName": image.png",
"Directory": "C:/Users/Username/folder/",
"FileSize": "97 kB",
"FileModifyDate": "2016:08:08 23:52:53-07:00",
"FileAccessDate": "2016:08:08 23:52:53-07:00",
"FileCreateDate": "2016:08:08 23:58:27-07:00",
"FilePermissions": "rw-rw-rw-",
"FileType": "PNG",
"FileTypeExtension": "png",
"MIMEType": "image/png",
"ImageWidth": 300,
"ImageHeight": 300,
"BitDepth": 8,
"ColorType": "RGB",
"Compression": "Deflate/Inflate",
"Filter": "Adaptive",
"Interlace": "Noninterlaced",
"ImageSize": "300x300",
"Megapixels": 0.090
},
{
"SourceFile": "C:/Users/Username/folder/image2.png",
"ExifToolVersion": 10.25,
"FileName": "image2.png",
"Directory": "C:/Users/Username/folder/",
"FileSize": "210 kB",
"FileModifyDate": "2016:08:08 23:52:53-07:00",
"FileAccessDate": "2016:08:08 23:52:53-07:00",
"FileCreateDate": "2016:08:08 23:58:29-07:00",
"FilePermissions": "rw-rw-rw-",
"FileType": "PNG",
"FileTypeExtension": "png",
"MIMEType": "image/png",
"ImageWidth": 680,
"ImageHeight": 878,
"BitDepth": 8,
"ColorType": "RGB",
"Compression": "Deflate/Inflate",
"Filter": "Adaptive",
"Interlace": "Noninterlaced",
"ImageSize": "680x878",
"Megapixels": 0.597
}]
I wrote a little script to convert the scraper JSON to something that might work with exiftool. I haven't tested it yet, but I'll probably get to it later today (have to setup some images without metadata). You can try it yourself in the mean time. https://gist.github.com/Adidea/e095.....616abe46ab52ab
Just run that in a browser console on about:blank or something and use the file input to select the json file. It'll dump the exiftool json into the page.
exiftool.exe -json=Formatted.json Images
Works if I set SourceFile to 'Images/File_Name', but I was hoping the file name itself would work. Looking into that.
I didn't get a chance to try it yet, but I've seen that you've already had and found something that needs fixed. I hope you can figure something out.
Plus, I'm learning a lot of new things I never knew about from this whole experience.