def METHOD_NAME(nw: NodeWrangler, curve, axis=(1, 0, 0), noise_strength=0, noise_scale=.5):
    axis = nw.vector_math('NORMALIZE', axis)
    if noise_strength != 0:
        z = nw.separate(nw.new_node(Nodes.InputPosition))[-1]
        rot_z = nw.scalar_multiply(noise_strength,
                                   nw.new_node(Nodes.NoiseTexture, input_kwargs={'W': z, 'Scale': noise_scale},
                                               attrs={'noise_dimensions': '1D'}))
        axis = nw.new_node(Nodes.VectorRotate, input_kwargs={'Vector': axis, 'Angle': rot_z},
                           attrs={'rotation_type': 'Z_AXIS'})
    normal = nw.new_node(Nodes.InputNormal)
    tangent = nw.vector_math('NORMALIZE', nw.new_node(Nodes.CurveTangent))
    axis = nw.vector_math('NORMALIZE', nw.sub(axis, nw.dot(axis, tangent)))
    cos = nw.dot(axis, normal)
    sin = nw.dot(nw.vector_math('CROSS_PRODUCT', normal, axis), tangent)
    tilt = nw.math('ARCTAN2', sin, cos)
    curve = nw.new_node(Nodes.SetCurveTilt, [curve, None, tilt])
    return curve