I have found an interresting tutorial where we can change the color by shader but it's not perfect:

shader_type canvas_item;
uniform vec4 skinMaskCol: hint_color = vec4(1.0, 0.0, 1.0, 1.0);
uniform vec4 skinCol: hint_color = vec4(1.0);
uniform float tolerance: hint_range(0.0, 1.0) = 0.2;
void fragment(){
vec4 image = texture(TEXTURE, UV);
vec3 color = image.rgb;
float alpha = image.a;
float skinMaskLen = length(skinMaskCol.rgb);
float cLen = length(color);
vec3 maskNorm = skinMaskCol.rgb / skinMaskLen * cLen;
vec3 skinColNorm = skinCol.rgb / skinMaskLen * cLen;
float skinDist = distance(color, maskNorm) * 5.0;
color = mix(skinColNorm, color, step(tolerance, skinDist));
COLOR = vec4(color, alpha);
}
Only condition is to set to magenta what i want to modify, but the color expant anyway to the darker pixels... and some artefact still here.