Commit Graph
10 Commits
Author SHA1 Message Date
facok 28fa9450e0 Add progress output to calibration
- Print calibration parameters at start
- Show encoding progress with batch count
- Print PCA results (variance explained per component)
- Show anchor color encoding status
- Display final basis shape and anchor coordinates
2026-03-20 03:02:04 +08:00
facok 3fec154341 Refactor: extract shared _hue_lerp and _wrap_hue_diff helpers
- Add _wrap_hue_diff() and _hue_lerp() to core/color_space.py for
  reuse across the codebase
- Remove duplicate _hue_lerp from nodes/intervene.py, import from core
- Update diagnostics.py to use shared _hue_lerp instead of inline logic
- Move input_var computation outside strength loop in test_type_ii_uniformity
- Move get_alpha_beta_t50() outside sigma loop in test_early_timestep_amplification
2026-03-19 18:14:13 +08:00
facok b8834564e2 Refactor: extract _bicone_factor helper and clean up diagnostics
- Extract repeated bicone factor formula (1 - |2L - 1|) into _bicone_factor()
  helper function, used in 4 places across color_space.py
- Optimize test_type_ii_uniformity: move decode outside strength loop
- Add named constants for test parameters in diagnostics.py
- Remove unused imports and variables
2026-03-19 15:47:20 +08:00
facok 651599b003 Fix bicone geometry: normalize chroma radii to equatorial
The chromatic anchors (R,G,B,C,M,Y) have different lightness levels
(L=0.38-0.63), so their observed chroma radii are already scaled by
the bicone factor (1 - |2L - 1|). The old code double-counted this
factor, causing round-trip errors of 10-12 units and color distortion.

Fix: In _hue_to_chroma_vector, normalize anchor radii to equatorial
(radius at L=0.5) before interpolation. During encode/decode, apply
bicone factor at target lightness. This ensures proper round-trip:
- encode(lcs) → hsl → encode(hsl) ≈ lcs with error < 1e-5
- Saturation now correctly returns 1.0 for saturated anchor colors

Also add diagnostics module for blurriness analysis:
- test_round_trip_consistency: verify bicone math
- test_normalization_stability: check timestep amplification
- test_type_ii_uniformity: measure variance loss at different strengths
- analyze_blurriness_causes: comprehensive diagnostic report
2026-03-19 13:21:12 +08:00
facok 6cd650596d Extract shared _chromatic_plane_basis helper and _ANCHOR_HUES constant
Deduplicate the Gram-Schmidt basis construction that was copy-pasted
in decode_lcs_to_hsl, encode_hsl_to_lcs, and calibration.py. Extract
anchor hue values into a module-level constant to prevent silent
divergence. Also remove unnecessary tensor clone in _angle_to_hue and
use torch.empty instead of torch.zeros where all elements are overwritten.
2026-03-17 13:05:27 +08:00
facok 02585b6bf1 Fix bicone HSL mapping by projecting anchors onto chromatic plane
Replace _hue_to_polygon_point with _hue_to_chroma_vector to fix
Type II and interpolated color intervention modes. The old function
interpolated raw 3D anchor positions (mixing lightness into chroma
directions) and ignored calibrated anchor angles. The new function
projects anchors onto the plane perpendicular to the achromatic axis
to get pure chroma radii, then interpolates radius and angle in the
same segment structure as _angle_to_hue for round-trip consistency.
2026-03-17 12:25:49 +08:00
facok c0449e3382 Fix BFloat16 error in VAE fingerprinting by casting to float32 2026-03-17 06:57:34 +08:00
facok 48d5f7efb6 Merge LCSCalibrate into LCSLoadData with per-VAE auto-caching
Replace two calibration nodes with a single smart LCSLoadData that
fingerprints VAE weights (sha256 of first decoder weight) and
auto-manages cached calibration files as data/lcs_{fingerprint}.safetensors.
2026-03-17 06:27:55 +08:00
facok 0973fd0fd8 Add docstrings to all public functions, classes, and methods
Coverage: 29% → 100% (41/41 public items documented).
Keeps the existing concise style with inline shape annotations.
2026-03-17 02:26:21 +08:00
facok 534bc19033 Implement LCS plugin for training-free color control in FLUX
Implements "The Latent Color Subspace" (arXiv:2603.12261v1, ICML 2026)
as a ComfyUI plugin with V3 API + V2 backward compatibility.

6 nodes across 3 categories:
- LCS/calibration: LCSCalibrate (PCA from VAE), LCSLoadData (cache load)
- LCS/intervention: LCSColorIntervene (single color), LCSColorBatch (multi)
- LCS/observe: LCSPreviewColors (latent color map), LCSStepObserver

Core modules: patchify (16ch->64d patches), bicone HSL<->LCS mapping,
alpha_t/beta_t tables (51 entries from Appendix F), PCA calibration,
and timestep normalization with residual preservation.
2026-03-17 01:43:26 +08:00