I’m just going to go off of this, as there’s a lot of code there and maybe a much simpler solution will suffice.
A normal image plot can take an Observable that you can update with new images whenever you want. You don’t need to create a recipe for that. Where that data comes from doesn’t really matter, you can of course use something like a frame number to take it from somewhere else. Like this:
images = [rand(50,50) for _ in 1:30] # thirty images stored in a vector, could be any other format as well
current_frame = Observable(1)
current_frame_data = @lift(images[$current_frame])
fig, ax, im = image(current_frame_data)
display(fig)
# now you can change the image data by selecting a different frame with the observable
current_frame[] = 2