Quick answer: Godot 4 tween created in _process running its first step before the frame renders? Tween advances on the same tick it's created - use call_deferred to start.
Spawn-with-fade-in animation. Fade tween created in spawn(); first frame shows the partially-faded state, not zero.
Defer tween creation
call_deferred("_start_fade")Tween created next frame. First frame shows initial state.
Or set initial value explicitly
Set the property to 0 before creating the tween. The first step has the right value to interpolate from.
Use bind_node + create_tween
Bound to a node; create after the node enters tree. Initial frame is clean.
“Tweens advance on creation. Same-frame visible state changes.”
If your spawn animation looks 'mid-state' on frame 1, the tween is starting from the wrong value. Defer or pre-set.