Hello, so I am currently working on making a butterfly fly around randomly. Currently I am trying to make sure the wings flap, I originally was going to rig them up and animate them however that wasn't working. Now I am trying to use CFrames to animate them. My issue with it is that it starts to drift away. Here is my code

local part = script.Parent

function upangle()
	local angle = CFrame.Angles(math.rad(-5), math.rad(0), math.rad(0))
	local position = CFrame.new(0, 0.02, 0)
	part.CFrame = part.CFrame * angle * position
end

function downangle()
	local angle = CFrame.Angles(math.rad(5), math.rad(0), math.rad(0))
	local position = CFrame.new(0, 0.02, 0)
	part.CFrame = part.CFrame * angle * position
end

function upflap()
	wait()
	upangle()
	wait()
	upangle()
	wait()
	upangle()
	wait()
	upangle()
	wait()
	upangle()
	wait()
	upangle()
end

function downflap()
	wait()
	downangle()
	wait()
	downangle()
	wait()
	downangle()
	wait()
	downangle()
	wait()
	downangle()
	wait()
	downangle()
end

local times = 0

while true do
	upflap()
	downflap()
	downflap()
	upflap()
end

I am new to scripting and this is outside my comfort zone. I've had to compensate for the small body of the butterfly by making the wing go slightly up and down, however, that is what is causing it to float away. It is likely something wrong with the maths, I've been playing around with it but it hasn't been working. If anyone could explain to me how I could make the wing stay in place while still compensating for the tiny body of the butterfly that would be appreciated.