Quick answer: Use sequential default. Or call .chain() after a parallel block to enforce ordering.

tween_property fades, then tween_callback should fire. They run together because parallel mode was on.

The Fix

# Sequential default
var tw = create_tween()
tw.tween_property(node, "modulate:a", 0.0, 0.5)
tw.tween_callback(self.on_faded)   # after fade completes

# Mixed
var tw2 = create_tween().set_parallel(true)
tw2.tween_property(node, "modulate:a", 0.0, 0.5)
tw2.tween_property(node, "position", target, 0.5)
tw2.chain().tween_callback(self.on_done)   # after both

chain() inserts a sequential boundary. Useful in mixed parallel/sequential pipelines.

Verifying

Callback fires after fade completes. Without chain in parallel block: fires concurrently.

“Sequential default. chain() boundary.”

Related Issues

For Tween parallel, see parallel. For Tween bounce, see bounce.

chain() orders. Callback last.