[Android] Metallic ‘Bug’ Cause Identified

Yesterday a user reached out to us with a report about impcat consistantly loading image templates with the metallic filter being on. We looked closely at this issue and found the reason.

The reason was a dark-mode plugin in the phone’s system settings.

U/k3rmitPL published a post on Reddit about a bug that causes a metallic look on all model templates:

Expected appearance
Reported appearance

U/k3rmitPL stated in a comment that »It was working fine on Sept 2nd«, so it couldn’t be linked to a flawed update of the impcat app itself. So he did his own research and concluded that the reason was an automatic update of Android’s WebView app. Later he posted a workaround, explaining how reversing that update resolves the problem, but that post has already been deleted by the author, as it was not the factual cause.

Shortly after that he reached out to us, explaining the issue. So we provided him with a quick hack that deactivates the metallic effect, revealing the true nature of the bug:

Expected appearance
Reported appearance

After some quick testing, we found out that this ‘effect’ can only be achieved by 2 very specific modifiers, which both aren’t being used by impcat at any point:

  • Inverting the viewport (excluding bitmaps)
  • and shifting the hue by 180 degrees to reverse the colours to their original hue

But these mechanics are commonly used to force a dark-mode effect. So we reached out to the user and asked if he was using any dark-mode plugins, and he not only confirmed that he was, but that decativating it also instantly resolved the problem.

Why that impacts the metallic look

The metallic filter is being controlled by an opacity mask that defines which segments are affected by it and which are not. Opacity masks use white and black information to define their intensity, white being visible and black being invisible. So applying an inverting filter to that mechanism of course reverses the way those masks work. Which is why the metallic filter was visible on an unpainted model: The black masks were falsely read as visible.

Where we go from here

Luckily this problem hasn’t yet been reported to us for iOS devices, so for now we’re intending to include a failsave mechanism for the next impcat update for Android, which shall force the device to ignore such filters for the app’s viewport.