the edges are solid pixels, this would likely look better with antialiasing applied
go to https://www.shadertoy.com/new
paste the code in the thing
paste this code in the console to be able to choose your own images:
for (let i = 0; i < 4; ++i) {
d = document.createElement('div');
d.className = "upload";
d.innerHTML = '<button onclick="document.querySelector(\'#texture' + i + '>div.upload>div>input\').click()" style="width:100%;">Upload</button>' +
'<div style="display:none;"><input type="file" accept="image/*"/>' +
'<p>#</p></div>';
document.querySelector('#texture' + i).append(d);
document.querySelector('#texture' + i + '>div.upload>div>input').addEventListener('change', function () {
if (this.files && this.files[0]) {
let p = document.querySelector('#texture' + i + '>div.upload>div>p');
URL.revokeObjectURL(p.innerText);
p.innerText = URL.createObjectURL(this.files[0]);
gShaderToy.SetTexture(i, { mSrc: p.innerText, mType: 'texture', mID: 1, mSampler: { filter: 'mipmap', wrap: 'repeat', vflip: 'true', srgb: 'false', internal: 'byte' } });
}
});
}
select an image for iChannel0.