fix: re-enable output_guidance/trajectory_guidance/score_slider on H3

These were force-disabled for a gate bug, not a measured failure: they
all rode _make_steer_ramp's last-half window, which measured 0-of-4 and
0-of-12 real step coverage on H3's shift-based schedules because it read
sigma as schedule position, which is false there. That gate was already
rewritten to recover the true position from the schedule's own base grid
and is wired into all three call sites -- their correction steps are
also self-normalizing (a fraction of the live tensor/embedding's own
norm, not an LTXAV-tuned constant), and trajectory_guidance's buckets
were built for H3's schedules from the start. Re-enabled to actually
test them now that the thing that broke them is fixed.

embed_guidance/taste_nearest_prompt stay off: different value function,
and phrase emphasis's own manipulation check directly measured
near-invisible pushes from it at H3's calibration -- an actual negative
result, not a stale gate.

Unvalidated on real hardware -- this removes a stale reason for
disabling them, not a claim that any of the three help.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
digital-garbage
2026-09-22 19:21:38 +03:00
co-authored by Claude Sonnet 5
parent a456a856e6
commit 2ace081737
2 changed files with 37 additions and 22 deletions
+14 -9
View File
@@ -10200,15 +10200,20 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
#
# The conditioning-payload value function (below) is NOT trained on H3: it only
# feeds embed_guidance/value_guidance/taste_nearest_prompt, all forced off there
# (see self._is_h3 override in the sampler) because they were built and calibrated
# for LTXAV and have never been shown to do anything useful on H3 -- training it
# would be pure waste. The OUTPUT value function just below is a different story:
# explore_first_step reads it too (to select between candidate seeds), and that
# mechanism is not H3-excluded -- training it only for output_guidance's sake
# (also forced off on H3) silently starved explore_first_step of every sample it
# needed, permanently printing "not ready yet" no matter how much was rated. So
# only the conditioning-payload VF stays H3-gated; the output VF trains on every
# family. h3_repr_steering has its own commit below, unconditional either way.
# (see self._is_h3 override in the sampler) because phrase emphasis's own
# manipulation check MEASURED near-invisible pushes from it at H3's real
# calibration -- training it would be pure waste. The OUTPUT value function just
# below is a different story: explore_first_step reads it too (to select between
# candidate seeds), and that mechanism is not H3-excluded -- training it only for
# output_guidance's sake, back when output_guidance was ALSO unconditionally
# forced off on H3, silently starved explore_first_step of every sample it needed,
# permanently printing "not ready yet" no matter how much was rated. Fixed by
# training the output VF on every family regardless of which of its consumers are
# gated. (2026-09-22: output_guidance/trajectory_guidance/score_slider are no
# longer forced off on H3 either -- that was a stale gate bug, not a measured
# failure like the conditioning-payload VF above -- but this training call was
# already unconditional before that change and needs no update.) h3_repr_steering
# has its own commit below, unconditional either way.
if (has_previous_run and refinement_key and not learning_profile.get("skip_learning")
and self._v2_reward_admissible(learning_profile)):
if not _is_h3:
+23 -13
View File
@@ -8786,19 +8786,29 @@ class FunPackLTXAVSceneChainSampler:
self._is_h3 = self._set_stream_axes(model)
if self._is_h3:
# H3's rating-driven mechanisms are h3_phrase_emphasis (Studio), h3_repr_steering,
# and (2026-09-03, re-enabled) dynashift -- see project_reward_model_rework.md.
# Everything else here was built and calibrated for LTXAV and has never been shown
# to do anything useful on H3 (output_guidance/trajectory_guidance/score_slider
# ride the same last-half gate that was calibrated there, and embed_guidance/
# taste_nearest_prompt read the same relative value function that phrase
# emphasis's own manipulation check showed produces near-invisible pushes at H3's
# real calibration). Forced off HERE, not just hidden in Engine Settings, so a
# project saved before this still behaves correctly instead of silently doing
# several things nobody asked for. DynaShift is the one exception, reopened
# specifically to test its own (unmodified) mechanism plus a new positive-pull
# channel on H3 -- unvalidated there like h3_repr_steering, not a claim it works.
output_guidance = trajectory_guidance = False
embed_guidance = score_slider = taste_nearest_prompt = False
# dynashift (re-enabled 2026-09-03), and (re-enabled 2026-09-22) output_guidance/
# trajectory_guidance/score_slider -- see project_reward_model_rework.md.
#
# The last three were originally disabled for a GATE bug, not a measured failure:
# they all ride `_make_steer_ramp`'s last-half window, which read sigma as
# "position in schedule" and measured 0-of-4 / 0-of-12 real coverage on H3's
# shift-based schedules. That gate was rewritten to recover the true position from
# the schedule's own base grid (see `_make_steer_ramp`'s docstring) and IS wired
# into all three call sites via `ramp_fn=_steer_ramp`. Their correction steps are
# also self-normalizing -- a fraction of the live tensor/embedding's own norm
# (`_build_output_guidance_wrapper`'s "NORM-CALIBRATED step", score_slider's
# `0.15 * cond.norm()`), not a constant tuned for LTXAV's specific scale -- and
# trajectory_guidance's own buckets (trajectory_probe.py) were built FOR H3's
# schedules from the start, reading real per-run sigma positions rather than an
# external formula. Re-enabled to actually test them now that the thing that broke
# them is fixed; still unvalidated on real hardware, not a claim they help.
#
# embed_guidance/taste_nearest_prompt stay OFF: unlike the three above, these read
# a DIFFERENT (conditioning-space) value function that phrase emphasis's own
# manipulation check directly MEASURED as producing near-invisible pushes at H3's
# real calibration (conditioning.py, `_is_h3` branch) -- an actual negative result,
# not an untested gate, so there's nothing here that fixing the ramp changes.
embed_guidance = taste_nearest_prompt = False
# Read once per run, consumed by _install_h3_final_layer at each scene's sample call.
self._h3_video_detail = max(0.0, min(2.0, float(h3_video_detail)))
# The gate every rating-driven wrapper shares. On H3 it is read off the schedule's