Tuesday, September 22, 2026

Coming Soon - 4.x (Update: 4.0.0 Out Now!)

UPDATE: 4.0.0 is out! Give it a try and let me know what you think through the Feedback link. 

I've been plugging away recently on the feature set that will go into 4.x. So what's going to be in it?

Well, far and away the biggest update is going to be a change to a more per-site experience. I kicked around a lot of ideas last year on this, but I never quite got some of my experiments working out like I hoped. So instead, I'd like to get a bit more simplified approach out there. Here's what it looks like in normal view and with the on/off switch shown:

   

Basically the zones are tracked site-by-site now, with the ability to override by site. This helps the browsing experience enormously if one site is bumping up the levels but the other sites are fine. You can also pick the fixed zone for the site and go from there. With the on/off button shown, you can also choose to not filter for a given site. I hope that this experience is familiar for people who use uBlock Origin, for example. Note that the default site zone may be of interest for starting in more conservative modes than Adaptive.

Second, KetchupDreamer had a good idea around the on/off switch. What if there was a smart pause timer that you could pick to disable all filtering for a set time and then reenable it? Well, now that's an option!

Third, the default experience for silent mode has been improved. While setting up your own collection is supported the same as it has been, the default collection acts differently. Not everyone loves the default images that are packed into the addon and importantly the switch in subject matter is often quite visible and pulls the eye towards the changes. This kind of defeats the point of the silent mode being silent. So the default behavior is going to now try to reuse a slightly modified image that was previously seen on that page (watermark is added, slight view change). In many cases, only a few images may be blocked on a page of images, and so doing the change this way instead often blends in seamlessly in a way that the old one did not. It will in some cases eventually fall back to the packed in images but this should be more rare. I'd encourage folks to give this mode a try and see what they think.

Speaking of encouraging folks to try certain things, one of the key final changes is around the initial setup experience. I gave it some thought and the two main options I think many people would need to consider are the silent image mode and whether or not the on/off switch are shown. So here's the first time setup wizard that helps with that:

 

 

It's my hope this will help make users aware of the options that may be most important to them.

As a final note, I've been enjoying using Codex during the development of 4.x. I'm not the strongest on the HTML based UI and it's helped a lot with coding that up. Additionally, there are several features that have been on the todo list for a few years and it's helping turn those into realities rather than staying as dusty dreams.

I'd like to give this a bit longer to bake but it's getting closer. All the features listed above have already been implemented and you can try them out if you're a developer right now! 

Saturday, January 3, 2026

Release 3.8.0 - Reveal Blocked Image & Custom Image Collections

Release 3.8.0 is out and I'm excited for two new features in there! I've been using Codex lately to boost some of the coding and it has helped get some great features over the finish line.

First, a small but helpful quality of life improvement. Sometimes a helpful image gets blocked, and it's quite annoying not to see it. As of this release, if you have the on/off switch enabled you'll also get a new option when you right click on an image, "Reveal Blocked Image". This will cause the image to reload so you can see it! As a design decision, I left this gated behind the on/off switch visibility because that's the most likely option to be set if the user wants to intervene in the filtering, so it seemed appropriate since it has the same "permissions" in a way. Note that in some cases this may not work as the thing you are clicking on it is not actually the image itself, but rather other visual elements in front of it. The addon does some work to navigate this situation but it's not perfect. But I'd say it works in about 95% of the situations I've tried it in and it's quite helpful! 

Second, the long-awaited custom image collection support is here! If you use "silent mode", placeholder images will be used in place of the standard blocked image. Now you can create your own custom image collections yourself, either using your own images or by searching a couple popular open image providers. Here's a screenshot of it in action! The way this feature works is it loads the images, downsizes them so it fits well within browser local storage, and then cycles through the image replacements. I know this has been a popular request, so I'm glad to see it finally in place!

 

Also, I have removed the Cloudflare DNS option. From survey and other feedback it seems to have been basically unused by anyone. Leaving it creates more to declare on the new data collection policy tags, so I've decided to remove it. 

Thursday, January 1, 2026

Wingman Jr. - Android is out!

 Check it out at https://addons.mozilla.org/en-US/firefox/addon/wingman-jr-android/ !

There may be a few bumps but let me know what you think. 

Monday, December 29, 2025

Hello Android, Hello Impostors?

I've received requests for an Android version of the Wingman Jr. addon for a bit now, but I haven't jumped in yet. Why not?

While I've briefly tested the addon for mobile in the past and I've seen that it generally worked, every time you submit to the addons portal it requires to say you tested it specifically for Android if you say it supported it. Testing for mobile does not seem too bad but with the already limited bandwidth I don't want mobile support to hold up normal releases. Additionally, if reviewers have to approve for both platforms it may hold up approvals as well.

In addition to Firefox users, however, it appears that Wingman Jr.'s lack of mobile support has also caught the attention of others. While the code for this addon is strongly open source and I encourage you to use it, there seem to be at least two copycat addons that I suspect of acting in bad faith:

  • https://addons.mozilla.org/en-US/firefox/addon/wingman-jr-premium/
  • https://addons.mozilla.org/en-US/firefox/addon/wingman-jr-master-pro/

I believe these to be suspect based on their shady descriptions, seemingly incorrect licensing, and strange home site links. I do not know if these are privacy-honoring or if they funnel data.As far as I can tell, they seem to be capitalizing on providing Android support because the main addon does not.

So - I think it is time to make a legitimate option for Android!

What's the strategy going to be?

  1. Clean up the main addon a bit. In particular - based on the fact that a) I believe no one is really using the Cloudflare blocking feature any more and that b) browsing domains are sent to Cloudflare if you opt into that feature and c) in conjunction with a new data collection reporting policy (which is good!), my plan is just to remove the feature entirely. Then I do not need to report any data collection, which will keep things simple and likely make approvals go faster. 
  2. Create a new addon with a new ID that is Android only. I will not necessarily update this as often, but the idea would be to keep feature parity based on the version number so if e.g. you use desktop 3.7.0 version you could expect roughly the same set of features on Android for 3.7.0 but desktop might get more in-between releases. 

Based on past experiences, I don't anticipate that Android support will be too hard so I don't expect too long of a timeline, but if there's one thing I know about development - particularly development on a new platform - it's that there are always surprises. So stay tuned to the blog and I'll post as progress continues!

Sunday, December 28, 2025

Release 3.7.0 - Quick Scan

 Today's release contains a small quality-of-life feature - a new video option (and the new default), Quick Scan. Why a new option? Previously on sites like imgur.com where small videos are heavily interspersed with images, the perceived performance of image scanning tanks because of all the little videos. Quick Scan just scans a few image frames in the video chunks and provides that as a tradeoff for speed, making the experience far less laggy while still providing a certain level of protection.

Sunday, July 27, 2025

Release 3.5.0 - Hidden Tabs and Fixes!

 So the next release is out!

First, a quick note: the release notes page isn't showing up right - you'll get a page to open but fail to load. I think Firefox changed something since that code hasn't been updated in a long time. See https://github.com/wingman-jr-addon/wingman_jr/issues/221

 Here's what changed:

  • If you have problems with the hidden tabs, try the new "Background.js WebGL" option! This allows users to optionally go back to the "old way" without hidden tabs, but falls back to hidden tabs if this is not possible. Note that the speed of scanning is also a bit slower, but for some it may be a lifesaver. It's in this section of the options:
    •  
  • Fixed Cloudflare-based DNS blocking support as it had been broken
  • Improved character set detection for international users

 

Tuesday, March 25, 2025

A Progress Update

Hello!

I've been chugging away on some things in the background, but the progress isn't in a release yet so I thought I'd talk a bit about some of the recent work.

 Here are three areas I've been working on:

  • Transformation #1 - Switch to a site-based focus for scanning (like uBO)
  • Bug - Try to improve the hidden tab situation. I have one idea for this already in motion.
  • Research #1 - new AI models, maybe new infrastructure for training

Site-based Focus

I've been working over at https://github.com/wingman-jr-addon/wingman_jr/issues/211 on getting the site-oriented focus working. I've gotten a bit of the core foundational work in that's not very exciting, and I've been starting to experiment with what kinds of new opportunities are available once going site-based.

One key opportunity is that now sites can be filtered using per-site statistics, which allows for some new ideas. For example, one thing I'm playing around with is an adaptive mode for mixed mode sites: think anything from Amazon to YouTube. These types of sites are historically quite difficult to get right - you can't just set one threshold and have it work particularly well. One aspect of this relates to human psychology as well: you may be generally browsing for good content but then a relatively objectionable image might pop up, and while it may not be that bad it stand out relative to its peers and has a somewhat similar effect.

 Note that generally the site-oriented arc of work is large, so don't expect a release with this feature in it soon. But the adventurous can see the experimentation going on if they like!

Hidden Tab Mitigation

 I have another option available for folks struggling with the hidden tab to try! Basically, go back to how the old addon version worked by picking a different backend option that doesn't use the hidden tab. It'll do a pre-check to ensure the original performance issue doesn't pop up, and fall back to the hidden tab if needed. For most, they'd see a decrease in speed, but it's far better than the tab regenerating. This work was merged in https://github.com/wingman-jr-addon/wingman_jr/issues/209.

New AI Model

I've done a smaller amount of work here, with SQRXR 145 being a potential candidate. This is an iterative rather than new model.

Friday, March 14, 2025

Model Candidate SQRXR 145

 I've been playing around with a new model variant, SQRXR 145. I've generally found it to be a bit better, but I'm trying to confirm how well it performs with false positives in trusted mode. For neutral and untrusted modes I think it does a bit better job all around. The adventurous can clone the repo at https://github.com/wingman-jr-addon/wingman_jr/tree/sqrxr-145 and give it a try.

Sunday, February 2, 2025

What Next in 2025?

Ideas for 2025

Here are the likely areas of focus for 2025:

  • Transformation #1 - Switch to a site-based focus for scanning (like uBO)
  • Transformation #2 - More long-term, but features or new addon variant to help those struggling with pornography
  • Bug - Try to improve the hidden tab situation. I have one idea for this already in motion.
  • Feature - Custom image replacement
  • Feature - Make balanced video scanning solution for better out-of-the-box experience
  • Research #1 - new AI models, maybe new infrastructure for training
  • Research #2 - could WebGPU + ONNX replace Tensorflow.js?

I do not expect these all to complete or even be successful, but I think most of my effort will go into these areas. Read below for a further breakdown!

Where to Focus?

 This can be a difficult question to answer; fortunately, people have responded to both the feedback survey as well as the exit survey which helps. So let's break it down a bit.

First, of the listed reasons on the exit survey, the top three reasons people leave are:
  1. The AI model isn't good enough, with responses split about 2:1 that it blocked too many safe images vs. letting bad ones through.
  2. The speed of image scanning is too slow.
  3. The hidden tab causes frustration. I didn't initially have an option for this but got enough write-ins that I added it and it has grown quickly, so there's a good chance this is actually reason #2.

Second, looking through feedback as well as the exit survey, some themes pop out:

  1. Many people use this as adults for themselves because they struggle with pornography, which is different than the original use case of primarily having it as a safeguard for kids. More on this in a bit.
  2. Lots of requests for custom image replacement for silent mode.
  3. Some folks don't like the UI, or find it confusing.
  4. Video scanning should be better.
  5. Some requests for whitelisting/blacklisting by site.
 Third, let's look at developments occurring from other angles.
  1. The main AI base library, Tensorflow.js, has stagnated heavily, and I no longer think we will see any performance improvements coming unless Google chooses to reinvest.
  2. AI has continued to advance rapidly, but it's not yet clear how applicable those advancements would be to the model for this addon. However, there are significant efforts that can be taken to potentially push forward.
  3. NVIDIA DIGITS as an AI training server may be interesting.
 

Transformative Ideas

While most of the ideas above are smaller changes, there are two that are transformative.
 
The first is that based on several pieces of feedback tying together, the addon would benefit greatly by changing to a site-oriented approach to blocking. If you've used uBlock Origin, it would be a bit closer to how that works. This would clear up UI confusion and would naturally tie in with whitelisting/blacklisting sites, etc.
 
The second is that some changes would benefit those struggling with pornography. While I definitely believe that you can't solve human problems with technology, the best technologies help humans help other humans. I'm still mulling this over given the limitations of what an addon can do, but I think key areas to look at would be 1) ways to establish accountability with others in their life and 2) reminders or features to help break out of the loop when they get stuck. This is more of a long-term transformation, and may even lead to a different variant of the addon depending on the features that make sense. If a true new addon variant were created, that would ideally occur after many of the other changes here are implemented so it would have a better foundation to move forward with.

Summary

There's certainly enough here to keep busy! If I can get a few of these knocked out, I think the addon will improve in some tangible ways.
 
As always, you can watch the issues over at https://github.com/wingman-jr-addon/wingman_jr/issues
I'm also playing around a bit with the GitHub Projects feature; we'll see if it goes anywhere but I'm checking it out at https://github.com/users/wingman-jr-addon/projects/1
Please continue to give feedback via the different surveys; I don't always respond but I do read them and try to consider how to incorporate them. Thanks!

Wednesday, January 29, 2025

Up Next 2025?

Just wanted to let folks know that I've been reviewing all the feedback and am working on what features to plan out for 2025! So stay tuned and I'll plan to comment on the upcoming roadmap in say the next month or so.

Tuesday, August 6, 2024

Release 3.4.0 Better Non-English Webpage Support

This release is especially for those whose native language is not English, or frequently browse international websites. If you've been keeping up with the releases, you will have noticed that international support has featured in quite a few of them with notes about character encoding etc. being fixed for a few characters. So you'd think that by now some of the main problems would all be fixed, right? How could this release help if so much work has already been done?

Well, it has to do with how web pages get served up. Handling international text is actually quite a difficult problem with many nuances. From a historical perspective, it wasn't solved well right away, and the early approach was often to use "code pages". How do these work?

Most languages - but not all, particularly excluding east Asian languages - could generally use a relatively limited number of characters to represent their language. In particular, the vast majority of languages could use 256 or fewer characters, which meant that since one byte can represent the numbers 0-255, you could use one byte to represent one character. Simple! This mapping is called a "code page". 

So what's the catch? Well, it didn't work as well for east Asian languages for one thing - but if you used two bytes you could make it work. But, it also meant that you couldn't use just one code page - you had to use one for each language. This makes new difficulties - for example, what if you want to show two different languages in the same page?

As a result, a new system was born - Unicode. The most popular encoding for Unicode is now UTF-8. This can use multiple bytes in a fancy system to represent an arbitrary number of "code points" - basically numbers to represent characters. (There is certainly more nuance here but this is roughly the idea.) This system has become ubiquitous, but it should be noted that web pages can take up a bit more room to support multiple languages.

Prior to release 3.4.0, only international pages using UTF-8 were really supported well, with a bit of extra support for the most common code page. But many web pages - particularly those with a focus on serving a single country - would use the older code page approach. Unfortunately this ran into a slightly tricky problem. To scan web pages containing embedded Base64 images, the web page itself is decoded and re-encoded. This means that the addon has to turn bytes into characters, check things, then turn the characters back into bytes. Decoding the bytes into characters is easy - just use TextDecoder. So you might be thinking that there would be a TextEncoder, too ... and you'd be right, but there's a catch. The built-in TextDecoder can decode basically anything, but the TextEncoder can only turn characters back into bytes using UTF-8. So, that means that out of the box, there is literally no way to support re-encoding text back into the served up code page. Ideally this would just exist in the main API.

But, to handle this I've now created a program that helps! Basically it creates a map containing all this code page information so that it can be used in place of TextEncoder. Is it perfect or complete? No. But there is a good chance your home language may now be supported for national websites - so, I hope this release works well for you and happy browsing!

Special thanks to Ayaya and Dragodraki for continuing to provide feedback on international language support!


Tuesday, January 30, 2024

Mailbag (Later 2023-Jan 2024)

 I was sifting through recent user feedback in the last couple of months, and have received a decent bit of feedback.

From Dragodraki

Dragodraki continues to be a star bug reporter! I've been able to fix many issues with international support due to their reports. Recent release 3.3.6 features another fix related to proper charset handling of Windows-1252.

From Ayaya - Cyrillic

Ayaya sent in feedback that Cyrillic was still not working fully correctly. See issue https://github.com/wingman-jr-addon/wingman_jr/issues/201

From SplinterCell

I got some constructive criticism from user SplinterCell mixed in with some other positive feedback (slightly edited for clarity):

  1.  It is unclear to me what the numbers mean on the images
  2. Why is there no option to blur images - this way users can recognize false-positives more easily
  3. The UI is ugly and it is not as self-explanatory as you think -> Do the buttons work per site, per browsing sessions, what do the buttons do, etc. it's wholly unclear. 

Good questions all, so I'll take a bit of time on each.

First, the numbers relate to the score that the image filter model returns. Basically, the higher the number, the more likely it is to be an NSFW image. This isn't quite the same as saying that it's a more NSFW image if it's a higher number, but there is often a correlation. For the technically-minded, it finds the model's confidence score, maps that on the ROC curve and returns 1.0-TPR at that point; not the most well-founded way but a confidence indicator.

Second, regarding blurring - there are a couple reasons. The first is that I try to think through the psychology of the addon a bit as well, and while blurring images allows false-positives to be picked out more easily it also also allows true-positives to be observed a bit better as well. Could it be an option for some? Yes, but probably not a default. The second reason is that blur effects are fairly computationally expensive, and I've tried to avoid incurring that cost so that pages with large numbers of images will still be speedy. In practice, it could be that this wouldn't be an issue. So - head on over to GitHub if you feel strongly about it and enter an issue.

Third - yes, I agree the UI is ugly and a bit clunky. As the main developer on the project, I have to choose where to put my time and this just hasn't been a focus. Here are a few notes:

  • Image filtering currently works at a global level, so the buttons are not per domain or per web page. However, this is something I've pondered changing.  (See related: https://github.com/wingman-jr-addon/wingman_jr/issues/184 and https://github.com/wingman-jr-addon/wingman_jr/issues/168)
  • The basic way that it works is there are different zones based on how sensitive the model is configured to be: use Trusted for sites without much chance of bad content, Neutral on sites where there's a chance some questionable content will pop up but rarely, and Untrusted on sketchy sites. You can switch between the zones to kick it into manual mode, otherwise it'll try to flip back and forth automatically when Automatic is selected.

 Whitelisting

A couple users (Opensourcerer and happydev) wrote in regarding a whitelisting feature. This is being tracked but hasn't seen action in a while - see https://github.com/wingman-jr-addon/wingman_jr/issues/184 from above.

Mobile - Future?

I got an unexpected PR from one ArthurMelton that helps support use on mobile. The addon doesn't officially support that, but this pushes it closer! Thanks Arthur!

Conclusion and Next Steps

Thanks for the feedback! Lately I've been working on reviewing machine learning research over the past 2 or so years to check for possible advancements to improve the base model, particularly those related to the explosion of growth brought about by the cross-pollination of transformers to image classification. You can see some of the experiments here: https://github.com/wingman-jr-addon/model/issues/7

Thursday, May 18, 2023

Release 3.3.4 - Revenge of the Character Encoding

Previously, in The Case of the Distorted Symbols I talked a bit about some improvements being made to better handle character encoding detection - this is the followup. If you're a non-technical reader, just know that some sites should hopefully work better to soon for displaying accented characters etc. as they ought to be rather than as symbols. If however, you're a technical reader, read on for some interesting notes about handling character encoding on the web.

 I've had at least one dedicated international user helping report bugs. To that end, I'd like to thank Drago for the helpful feedback in reviews. Recently, Drago reported that a specific site wasn't working, so it gave me an opportunity to debug further and nail down the specific problems.

In the first round, I took a naive approach to detecting character encoding and was able to pass most of the test suites found here: https://www.w3.org/2006/11/mwbp-tests/index.xhtml 

However, I had some interesting problems:

  • My original approach would read in bytes and output them through the TextEncoder as utf-8. This is problematic because the input bytes could actually have been in iso-8859-1.
  • True character set detection is quite difficult because you have to actually sniff the request contents because the headers are not enough to definitively determine the character set type.
     

By default, the new implementation starts in iso-8859-1 and then "upgrades" to utf-8 if any of a variety of conditions are encountered:

  1. Headers: Content-Type has a charset
  2. Content sniffing: starts with BOM
  3. Content sniffing: XML encoding indicates utf-8
  4. Content sniffing: meta http-equiv Content-Type indicates utf-8

Content sniffing uses the first 512 bytes currently, and the specific upgrade types have quite narrow search patterns - e.g. different ordering of http-equiv could cause non-detection etc.

All of the tests in the W3C test suite now pass!

With the improved approach, I'm hopeful that >90% of international pages will be correctly handled now, but we'll see what folks like you encounter - let me know if you encounter any bugs via the feedback link in the addon or via https://github.com/wingman-jr-addon/wingman_jr!

Thursday, May 4, 2023

The "Hidden Tabs Keeps Appearing" Problem

 Summary: Hopefully this is fixed in 3.3.3, but see Note 2 at bottom if you still have problems!

I've been hearing scattered reports for quite some time about how the hidden tabs prompt keeps appearing; enough that I added a dedicated category for it to the exit survey so I could see if it was a major issue or not.

And the answer was a resounding "yes". I also started seeing the occasional review that discussed it, too.

Unfortunately as is often the case, I could not reproduce the issue, and I did not have a clear way to find out what was causing it. Fortunately I was able to respond to one of the reviewers and the worked with me to capture logs from their system. So if this fix works for you, please tell Umbrella123 over on the GitHub issue thanks! (See https://github.com/wingman-jr-addon/wingman_jr/issues/185)

So what was the problem and why did the "Hidden Tabs" prompt keep appearing?

First, it's important to keep in mind that originally the addon did not need these hidden tabs. But unfortunately some slight changes in how Firefox and the machine learning framework Tensorflow.js interacted caused the old approach to become unbearably slow one one Firefox release a couple years ago. This forced a massive rewrite. As part of the rewrite, I needed to basically separate the addon into two parts: the original core part, and a satellite "web page" that can access the graphics card more effectively. Having these separate parts has two important implications: 1) the "Hidden Tabs" prompt shows up to hide the satellite "web page" and 2) there is increased complexity to get the two parts to talk to each other.

Second, the increased complexity of the system drove me to rely on a "watchdog" - the addon will send itself a known test image every few seconds and check that the result is as expected and consistent. This makes sure data is flowing through the system OK. This is quite important because generally people expect the addon to work even after scanning tens of thousands of images, just like the browser does. I'd also seen sometimes in the past where Tensorflow.js eventually could become unstable so it helps guard against that. If the "watchdog" self-test fails, the addon will assume that something has gone wrong with itself and restart after a certain threshold.

You can probably see where this is going now: when you see the "Hidden Tabs" prompt, it is the addon restarting itself because it thinks it is malfunctioning.

For a while I assumed this was probably due to some bad interaction with another addon that also did filtering. But it turns out that the true cause of the problem is that Tensorflow.js on certain Linux systems seems to give inconsistent results from the first prediction to later predictions for the same test image - the values can be close, but still different. So the self-checker would bail after a few self-checks and the "Hidden Tabs" prompt would appear.

I would argue that this seems to be a bug in Tensoflow.js on Linux, but I decided to make the check more robust by doing an "approximately equal" check instead and now it is working. Hooray! Special thanks to Umbrella123 for helping finding the issue, Opensourcerer for confirming the fix, and all the users reporting they were having this problem. Please let me know on GitHub or in reviews if you are still seeing issues, but hopefully it's just gone now.

Note! Umbrella123 also pointed out that they needed to set two settings to work - in about:config, set webgl.out-of-process to true and webgl.force-enabled to true. Please try these if you are having issues.

Note 2! Codedotexe reported that they needed to increase the tolerance for their computer - I'll plan to widen it for the next release as per https://github.com/wingman-jr-addon/wingman_jr/issues/191

Saturday, January 14, 2023

Feedback from 2022

Over the last year or so, I've gotten a decent bit of feedback across a number of different channels. I thought I'd share that here so folks can get a sense of what I'm hearing. This blog post is long, but there are three main categories of feedback covered here if you'd like to skip around: current user feedback, reviews, and exit poll feedback. If you wrote in, please check it out - I've likely responded to your input. I'd like to thank everyone for their feedback, as it has been generally constructive and helpful!

Sunday, February 13, 2022

Silent Mode - Custom Images?

This post is for folks who use silent mode - I've gotten some feedback from a couple helpful users:

qvim's hope: "...change the silent mode images, it would be my preference for me to choose my own images for this mode. there's nothing wrong with the images just that i would like to have the ones i prefer"

Cranky's hope: "...Ability to add custom images for silent mode from an online database of SFW images (you can memorize the stock images pretty quickly, defeating the purpose)", "Ability to lighten/darken/remove the watermark in silent mode"

  Silent mode is one of my personal favorite features, so it makes me happy to hear that others are using it - and using it enough that they'd like to see it expanded somehow.

So first, let's talk just a bit about how silent mode works right now. I've gotten a number of images from Unsplash, downsized them heavily, and included them directly in the addon (~100 images in ~2MB!). I've also created an index of  metadata for attribution as well as some data for image similarity, so that in theory the images being replaced seem less out of place. Honestly, I don't think that it works particularly well in that regard, but there is a rudimentary method in there right now that does that.

So, what about adding your own images? To do so I think there would be a couple approaches:

  1. Drag and drop your images onto the addon settings page.
  2. Provide a way to get placeholder images from the web.

Since the image similarity code is done as a pre-build step, the logic isn't even in the JS of the addon, so both potential methods might lack a bit there.

Option #1 wouldn't be too hard but I'd have to look into local storage limits. I think we might hit some issues there, particularly if folks aren't resizing the images as heavily as I did. Additionally, if images are handpicked, Cranky's note about memorizing the stock images still is unsolved unless many, many images are put in - which will definitely have problems with local storage limits.

Option #2 provides more flexibility - for example, see this list of placeholder image services. Most of these image services tend to provide a URL where the desired width and height is supplied, which would mesh well with the addon's current functionality.

I think option #2 comes with fewer headaches, but let me know over on GitHub!

(Update: the adventurous may wish to watch this branch...)

Thursday, January 20, 2022

Block/Allow Images?

 Recently I got some friendly feedback from "qvim". There were multiple parts to it, but I wanted to highlight one of the suggestions. The desired feature would be to ...

block with click, sometimes it doesn't work and if possible I would like to click on the image with the right button and be able to block or allow. (very important)

Now, I'm actually a bit surprised that I haven't gotten more feedback around this type of request in the past. It's popped up maybe once or twice. There a couple interesting points about this, one technical and one more based on use cases.

 First, the technical reason. For those who haven't peered at the source code, you may be interested to learn that the addon does not actually interact directly with the HTML elements at all. Nope. The filtering actually ties in at a lower level - it is basically processing the network requests for different media types. When I started the project, I thought about taking an approach that would interact with the HTML for each image, but decided against it because I thought working with streams would do a better job of catching every single image going through the system. Several years in, I think I made the right choice but there are still some exceptions - base 64 images and a few others delivered in special ways. However, I don't have to deal endless hacks against the HTML DOM to try to catch every element change or to try to make images invisible until the addon has scanned them.

So why does this matter? Well, it means that once the data has been scanned, I don't have an easy way to know where it actually appears on the page. The image data is essentially read-only. Similarly, I certainly could create something to interact with the images as HTML elements, but there just hasn't been a strong need.

Second, the use cases. Folks like to use this addon in a variety of ways. In some cases, the user is an adult and would like to filter out the junk. But in other cases, parents are using this as a basic defense for their kids. While it's not easy to lock down addons as a parental control, I do try to avoid showing one-click options to see images. There's also a third use case, where the user is an adult but is trying to overcome pornography. In that case, it may also not be the best option to make it too easy to view a blocked image.

So where does that leave things? Well, since the data is already delivered and read-only, it is not technically easy to go back and show an already blocked image (possible, yes, but definitely not trivial). However, hiding an offensive image that the filter missed is easier because it does not require this coordination - for example, the HTML element can just be altered. Similarly, from a use case perspective, it is likely good to allow blocking an image, but not showing one. The easiest way to do something like this would be to expose it as a right-click context menu, but if you follow that link you may notice that the user experience could get a little clunky.

This also ties in with another request: can users report that images are either being blocked incorrectly or that they should be blocked? This one is a bit more spicy to deal with.

I'd like to hear more feedback about if you'd be interested in this blocking feature and/or if you'd be interested in an image reporting feature. Let me know using the feedback link in the addon, or head on over to GitHub!


Update: you can see a rudimentary version of this here: https://github.com/wingman-jr-addon/wingman_jr/tree/hide-images with relevant issue at https://github.com/wingman-jr-addon/wingman_jr/issues/162

Saturday, January 15, 2022

Welcome, Linux Users!

 Recently there was a bump in new users - and the Firefox stats seem to indicate that many of you use Linux. Welcome friends!

Now, I've got a question for you. I don't use Linux desktop as my daily driver, so I need your help in understanding how the performance is looking so far. This addon relies on some level of hardware acceleration ... which hasn't always had the best support on Linux. If you've got a second, I'd love to hear from you over at this poll on Google Forms - can you please help me out?

One last note: if you are finding that the default WebGL backend isn't working well on your machine, it might be worth it to try the WASM backend, which you can pick in the options for the addon.

Hope you enjoy Wingman!

 

Update: Poll results from 4 users - glad to hear it's working well for you!