Position and rotation of a copied humanoid in a GUI isn't working

Greetings.

So, a friend of mine created a script for a Locker GUI, where the player can choose their accessories and then there is a copy of a player in the GUI, something like a preview, of how the player will look.

The problem: The arms and legs of the copy of the player stay in the same rotation as the real player is currently in, while the head and the body rotate as needed, and we cant really figure out how to fix that.
Has anyone an idea? I will leave a part of the code down here and a image showing the problem.

local function ReplicateChar()
	player.Character.Archivable = true
	repeat wait() until player.Character:FindFirstChild("Torso")
	for i,v in pairs(player.Character:GetDescendants()) do
		v.Archivable = true
	end
	local newChar = character:Clone()
	for i,v in pairs(newChar:GetChildren()) do
		if v:IsA("Model") or v:IsA("Accessory") or v:IsA("Tool") then
			v:Destroy()
		end
	end
	if newChar:FindFirstChild("Saude") then
		newChar.Saude:Destroy()
	end
	newChar.Parent = workspace.xgWorkspace
	for i,v in pairs(CurrentEquipped) do
		if i == "Chest" then
			for _,x in pairs(v:GetChildren()) do
				modules[i].Equip(player, x, true)
			end
		else
			modules[i].Equip(player, v, true)
		end
	end
	return(newChar)
end


local function InitChar()
	for i,v in pairs(CurrentEquipped) do
		print(i,v)
	end
	spawn(function()
		for i,v in pairs(preview.RenderFrame:GetChildren()) do
			v:Destroy()
		end
		local newchar = ReplicateChar()
		newchar:SetPrimaryPartCFrame(CFrame.new(newchar.PrimaryPart.Position) * CFrame.Angles(0, 180, 0))
		newchar.Parent = preview.RenderFrame

		local VPP = Vector3.new(0,0,0)

		local itemCam = Instance.new("Camera",preview.RenderFrame)
		preview.RenderFrame.CurrentCamera = itemCam

		local currentAngle = 0
		local modelCF, modelSize = newchar:GetBoundingBox()	

		local rotInv = (modelCF - modelCF.p):inverse()
		modelCF = modelCF
		modelSize = rotInv * modelSize
		modelSize = Vector3.new(math.abs(modelSize.x), math.abs(modelSize.y), math.abs(modelSize.z))

		local diagonal = 0
		local maxExtent = math.max(modelSize.x, modelSize.y, modelSize.z)
		local tan = math.tan(math.rad(itemCam.FieldOfView/2))

		if (maxExtent == modelSize.x) then
			diagonal = math.sqrt(modelSize.y*modelSize.y + modelSize.z*modelSize.z)/2
		elseif (maxExtent == modelSize.y) then
			diagonal = math.sqrt(modelSize.x*modelSize.x + modelSize.z*modelSize.z)/2
		else
			diagonal = math.sqrt(modelSize.x*modelSize.x + modelSize.y*modelSize.y)/2
		end

		local minDist = (maxExtent/2)/tan + diagonal

		local Scale = 1500

		local Center = Vector2.new(workspace.CurrentCamera.ViewportSize.X / 2, workspace.CurrentCamera.ViewportSize.Y / 2  - (game:GetService("GuiService"):GetGuiInset().Y/2))
		local MoveVector = Vector3.new((Mouse.X-Center.X)/Scale, -(Mouse.Y-Center.Y)/Scale, 0)
		itemCam.CFrame = modelCF * CFrame.fromEulerAnglesYXZ((-(Mouse.Y-Center.Y)/Scale),(-(Mouse.X-Center.X)/Scale)+math.rad(180), 0) * CFrame.new(0, 0, minDist)

		local function Update()
			if newchar == nil then return end
			itemCam.CFrame = modelCF * CFrame.fromEulerAnglesYXZ((-(Mouse.Y-Center.Y)/Scale),(-(Mouse.X-Center.X)/Scale)+math.rad(180), 0) * CFrame.new(0, 0, minDist) ---(Mouse.X-Center.X)/Scale
		end

		Mouse.Move:Connect(Update)
	end)
end

^ The part of the code where the copy of the player is created.

As someone new to scripting, this script flies completely over my head - but maybe some artifact of the original character remained after you copied it. I’d try welding the limbs of the new Character to the HumanoidRootPart and see what happens (assuming it doesn’t need to move). Even if this doesn’t work, it could give you some valuable information about what’s causing the issue.

Another thought is that your script does not purge all scripts from the new Character - maybe some custom script in there meant for a player-controlled Character is messing something up?