You understood the question perfectly!
In fact, I didn’t know it was possible to use a plain convolution with a different batch size between the image and the kernel. I was pretty sure that, having a batch size of 3 for my kernel, my image needed to have a batch size of 3 too.
(Just in case, your last line should be print((abs(out - result) < 1e-6).all()) - surely because of floating precision).
Thanks for your help, your answers are always useful, whatever the subject!