`CFrame.fromOrientation(math.rad(Camera.CoordinateFrame.X), math.rad(Camera.CoordinateFrame.Y), math.rad(Camera.CoordinateFrame.Z))`

This part is unnecessary, and it’s using the wrong information given what you’re trying to accomplish. `Camera.CoordinateFrame`

is just a CFrame, so it’s X/Y/Z properties represent the components of it’s position, not rotation. The rotation components of a CFrame are a little more complicated.

If you do want easy values for the rotation of a CFrame you *can* use `local rx, ry, rz = cframe:toEulerAnglesXYZ()`

but I would advise against it. They’re fine for debug purposes but you’ll get much more accurate results by calculating the values for yourself.

`CFrame.new(workspace.Part.Position)`

is a step in the right direction. As mentioned the CFrame constructor can accept 2 Vector3 values to create a CFrame that is positioned at the first Vector3, looking towards the second Vector3.

So in your use case building a CFrame to look at the camera from a parts position would look like

`part.CFrame = CFrame.new(part.Position, camera.CFrame.p)`