Is there a way to run Set_Cell on mass or a pixel by pixel basis?

Context

I’m working on a 2D top down game with a Tile Map. I currently have 2 tilesets one is in Greyscale and the other is in colour. I’m trying to make a function that when a button is pressed it explodes and colours the tiles around it.

Current Implementation

At the moment I run set_cell(position,-1) to remove the grey tiles revealing the colour below. This works as intended but is very blocky as I am working with 16x16 tileset. Right now with this method the shape is easy as I just take the Tile plus all the adjacent tiles.

Ideally i’d like to have it on a pixel by pixel basis to give it a more realistic effect, to achieve this I changed the tileset to 1x1 and used tileset patterns to act as tiles for tile map painting. This has the sort of effect I’m after but i’m worried if this will have big performance issues, as I can only get Set_Cell can only do one tile at a time, so I was going to have to calculate all the relevant pixels and then put it through a loop and loop through setting the cells.

I’m also not sure also how to get a explosion/paint effect from just one pixel, the only way I can think of is making a function to find all the cells around the impact point and recreate the effect with a chance effect, the closer from the center the pixel is the less likely it is to be removed.

Question

I’ve used Godot a fair bit but never tried something like this before, I’m also wondering if there is a better way to go about this and I am just overcomplicating the soloution. Or if its even possible for that matter.

Any solutions or ideas would be appreciated for making it a pixel by pixel affect