I am trying to create a joint between two parts such that the joint's position is in the middle of their CFrames. My issue is that I have one segment of code that will offset the joint and maintain the correct rotations, but the part's positions will be changed when I unachor the parts. And I have another segment of code that will maintain the position of the part's but not their rotation. I can't find a middle ground between the two.

Here is the code that maintains rotation, and also a gif of what I mean: GIF: https://gyazo.com/b8ff8876433638e36816aa599689e5df

  function weld(part0, part1)
    local motor6d = Instance.new("Motor6D")
    motor6d.Part0 = part0
    motor6d.Part1 = part1
    motor6d.Name = part1.Name

	local jointPosition = part0.CFrame:Lerp(part1.CFrame, 0.5)
    local jointOffset = jointPosition
    local offset = jointOffset:toObjectSpace(part0.CFrame)

    motor6d.C1 = offset
    motor6d.C0 = offset:Inverse()
    motor6d.Parent = part0
    
    createVisual(part0, motor6d.C0)
end

Here is the code that maintains position, and a gif of what I mean: GIF: https://gyazo.com/62dd6d148bcd73e63b3e148ebd0d9096

function weld(part0, part1)
    local motor6d = Instance.new("Motor6D")
    motor6d.Part0 = part0
    motor6d.Part1 = part1
    motor6d.Name = part1.Name
    
    local jointPosition = CFrame.new((part0.Position + part1.Position) / 2)
    local jointRotation = CFrame.Angles(math.rad(part1.Orientation.X), math.rad(part1.Orientation.Y), math.rad(part1.Orientation.Z))
    local jointOffset = jointPosition * jointRotation
    
    local offset = jointOffset:toObjectSpace(part0.CFrame)
 
    motor6d.C1 = offset
    motor6d.C0 = offset:Inverse()
    motor6d.Parent = part0
    
    createVisual(part0, motor6d.C0)

end