Alright… I’ve figured it out:
using CairoMakie
using Images
using DataFrames
using DataFramesMeta
# Load cow
img_orig = load(Makie.assetpath("cow.png"))
img_filt1 = imfilter(img_orig, Kernel.gaussian(3))
img_filt2 = imfilter(img_orig, Kernel.gaussian(30))
img_filt3 = imfilter(img_orig, Kernel.gaussian(300))
img_bw = Gray.(img_orig)
# Combine
img_array = [img_orig;;; img_filt1;;; img_filt2;;; img_filt3;;; img_bw]
# Data
df = DataFrame(x=rand(1:400, 10), y=rand(1:300, 10), c=rand(10), f=rand(1:5, 10))
frame_i = Observable(1)
df_i = @lift(@rsubset(df, :f == $frame_i))
img_i = @lift(img_array[:, :, $frame_i])
fig = Figure()
ax = CairoMakie.Axis(fig[1, 1])
# Plot
function _plt_fig!(frame)
frame_i[] = frame
image!(ax, rotr90(img_i.val))
scatter!(ax, df_i.val.x, df_i.val.y, color=df_i.val.c, markersize=30)
return fig
end
frames = 1:5
record(fig, "video.mp4", frames; framerate=1) do i
_plt_fig!(i)
end