Body cam head (clamped)

I am trying to make a body cam head system, but i’m having trouble with the root part rotating too much so that it causes the whole character to spin infinitely. any help would be appreciated.

local humanoid = char:WaitForChild("Humanoid")

humanoid.AutoRotate = false

local FakeHead = Instance.new("Part", char)
FakeHead.Name = "FakeHead"
FakeHead.CanCollide = false
FakeHead.CanQuery = false
FakeHead.CanTouch = false
FakeHead.CFrame = head.CFrame
FakeHead.Transparency = 1

local weld = Instance.new("WeldConstraint", FakeHead)

weld.Part0 = upperTorso
weld.Part1 = FakeHead

runService.RenderStepped:connect(function()
	CamPos = CamPos + (TargetCamPos - CamPos) *0.28
	AngleX = AngleX + (TargetAngleX - AngleX) *0.35
	local dist = TargetAngleY - AngleY
	dist = math.abs(dist) > 180 and dist - (dist / math.abs(dist)) * 360 or dist
	AngleY = (AngleY + dist *0.35) %360
	cam.CameraType = Enum.CameraType.Scriptable

	cam.CoordinateFrame = head.CFrame
		* CFrame.Angles(0,math.rad(AngleY),0)
		* CFrame.Angles(math.rad(AngleX),0,0)
		* CFrame.new(CurrentOffset)
	--print(head.CFrame)
	local difference = head.Orientation-FakeHead.Orientation
	difference = -difference
	local camLv = cam.CFrame.lookVector
	local camRotation = math.atan2(-camLv.X, -camLv.Z)
	rootPart.CFrame = CFrame.new(rootPart.Position) * CFrame.Angles(0, camRotation, 0) * CFrame.Angles(math.rad(difference.X),math.rad(difference.Y),math.rad(difference.Z))
	--[[spawn(function()
		local camDirection = rootPart.CFrame:ToObjectSpace(cam.CFrame).LookVector
		if neck then
			neck.C0 = CFrame.new(0, neckY, 0) * CFrame.Angles(3 * math.pi/2, 0, math.pi) * CFrame.Angles(math.rad(90), 0, -math.asin(camDirection.x)) * CFrame.Angles(0, math.rad(180), 0)
		end
		if waist then
			waist.C0 = waist.C0:Lerp((CFrame.new(0,waistY,0) * CFrame.Angles(camDirection.Y,0,0)),0.5 / 2) * waistOffset --* CFrame.Angles(0,math.rad(UserInputService:GetMouseDelta().X),0)
		end
	end)]]
end)