Tracked Face Detail (SDXL)
The half of the video face detailer you'll tune a hundred times
- image
- face_tracks
- model
- clip
- vae
- positive
- negative
- lora_stack
- reference_image
- image
- face_masks
Tracked Face Detail is the other half of the split path: it takes a FACE_TRACKS object plus the original frames and runs the actual SDXL sampling - every anti-flicker trick in the Temporal Face Detailer pack, applied to the tracked face crops. It's the exact same detailing engine as the all-in-one node, just without detection inside. You wire Face Detect + Track's face_tracks into this, and suddenly you can iterate on sampler settings without re-running tracking, because tracking only happened once.
How it fits in
The split workflow is: Load Video → Face Detect + Track → Tracked Face Detail → Video Combine. And yes, you feed the same original frames into Tracked Face Detail (image input) - the detailer needs the source pixels to crop and paste back against. Model/CLIP/VAE come from a normal SDXL checkpoint. The README calls this the "tunable" path, and it's right: tracking is the expensive, error-prone half to redo, so isolating it means you can burn as many sampler experiments as you like.
What it does to each track
For each track, the node builds a stabilized square crop (constant size, landmark-anchored center, temporally smoothed - the geometry was already computed during tracking), resamples it at guide_size (768 default, max_size 1024 caps it), VAE-encodes, and samples. The important part: with noise_mode: fixed_per_track (default), every frame in the track is sampled from the same seed and noise, so the sampler literally cannot diverge frame-to-frame. Then it optionally blends in latent space (latent_blend), decodes, color-matches each crop to its source, applies the flow-guided pixel blend (flow_strength), and feather-pastes only the face region back (mask_dilation / feather).
detail_mode is worth understanding: img2img (default) resamples the whole crop, with the mask only limiting paste-back; inpaint restricts sampling to the face mask in latent space. If you're seeing the background change around faces, that's img2img resampling the whole crop - inpaint is the tighter option.
Inputs that matter
Beyond image, face_tracks, and the checkpoint, the ones you'll actually live on:
denoise(0.35 default) - main quality-vs-consistency lever; 0.3–0.45 is the sweet spot. Adddenoise_maxfor adaptive behavior: steady frames stay at the base, high-motion frames ramp toward the max.noise_mode- keepfixed_per_trackunless you're A/B testing against naive per-frame detailing.flow_strength/latent_blend- the anti-flicker dials. Raiselatent_blend(try 0.3–0.5) instead of cranking denoise when you want more detail.reference_image+reference_strength- an optional identity anchor: a clean face photo the crops are nudged toward. Invaluable when a character slowly drifts off-identity over a long clip.track_prompts- per-track positive prompt overrides, one per line like0: photo of johndoe person, detailed face. Get the IDs from the debug overlay.lora_stack- feed a TFD LoRA Stack here to apply face LoRAs only on the crops.chunk_size- lower it (default 4) if you OOM;detail_every2–4 is the keyframe speed mode for long clips.
Outputs
image goes to Video Combine (the finished frames), and face_masks (MASK) is optional - preview it via a Mask To Image node or save it to see exactly what got re-rendered. There's no debug_overlay or face_tracks out on this node; those come from the tracking side.
Where people get burned
The usual first mistake is forgetting the image wire - the node silently needs the original frames alongside the tracks, and a graph that "looks right" just produces an error until you connect it. OOM on long clips is the second: drop chunk_size. And if you're chasing detail and the face starts flickering again, the fix is almost never more denoise - it's latent_blend, or going back upstream to check that the tracking itself is stable.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| face_tracks | FACE_TRACKS | — | |
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| positive_text | STRING | detailed face, sharp eyes, high quality skin texture | — |
| negative_text | STRING | blurry, deformed, low quality | — |
| guide_size | INT | 768256–2048 | resolution faces are resampled at |
| max_size | INT | 1024256–2048 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–100 | — |
| cfg | FLOAT | 7.00–30 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.350–1 | main quality/consistency lever: higher = more detail but more flicker (0.3-0.45 recommended) |
| denoise_max | FLOAT | 0.000–1 | adaptive denoise: when above 'denoise', steady frames keep the low base value while high-motion frames ramp toward this. 0 = off (single global denoise) |
| noise_mode | COMBO | fixed_per_track | fixed_per_track reuses the same seed and noise on every frame of a track — the biggest identity-stability lever |
| detail_mode | COMBO | img2img | inpaint restricts sampling to the face mask in latent space; img2img resamples the whole crop (mask still limits the paste-back) |
| mask_dilation | INT | 80–128 | — |
| feather | INT | 150–128 | — |
| temporal_strength | FLOAT | 1.000–1 | master anti-flicker strength; scales flow blend + color match |
| flow_strength | FLOAT | 0.500–1 | optical-flow-guided temporal blend of detailed crops (pixel space) |
| latent_blend | FLOAT | 0.000–1 | flow-guided temporal blend in LATENT space before decode — smooths in the VAE's semantic space, letting you raise denoise with less flicker. Try 0.3-0.5 with denoise 0.25+; 0 = off |
| flow_bidirectional | BOOLEAN | true | — |
| flow_backend | COMBO | farneback | raft_small/raft_large (torchvision) give much cleaner flow on fast motion at some VRAM/time cost; auto-falls back to farneback on any failure |
| color_match | FLOAT | 0.500–1 | match each detailed crop's color to its source (stops brightness pulsing) |
| chunk_size | INT | 41–64 | crops sampled per batch; lower if you hit OOM |
| detail_every | INT | 11–30 | keyframe mode: sample every Nth frame, flow-propagate the rest (speed on long clips) |
| positiveopt | CONDITIONING | overrides positive_text | |
| negativeopt | CONDITIONING | overrides negative_text | |
| lora_stackopt | LORA_STACK | — | |
| track_promptsopt | STRING | per-track positive prompt overrides, one per line: 'track_id: prompt' (see the debug overlay for IDs) | |
| reference_imageopt | IMAGE | identity anchor: a reference face image the detailed faces are biased toward (init-latent nudge + color anchoring). For strong identity conditioning also patch the MODEL with IPAdapter FaceID upstream — crops are sampled with whatever model you feed in, so it composes | |
| reference_strengthopt | FLOAT | 0.350–1 | how hard to pull toward reference_image (no effect unless it is connected) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| face_masks | MASK | — |