Visual Debugger
Record and inspect lossless Game view frames
Inspect a static frame range
Visual Debugger records lossless Game view frames in the Unity Editor. Static Frame Stability measures flicker, gradient banding, and repeated directional boundaries independently.
- Open Tools > Visual Debugger. Enter Play Mode, choose your recording settings, and click Start Recording.
- Click Stop Recording and wait for the recording to finish saving. Open Playback and select the recording in the library.
- Click New analysis, then Static frame stability. Set First frame and Last frame to an inclusive range containing at least three saved frames.
- Leave Custom region off for the whole frame. To inspect a smaller area, enable it and drag on the preview, or enter its left, top, width, and height in recorded pixels. The origin is the top-left corner.
- Click Analyze recording. Select Flicker, Banding, or Stripes / layers to see its summary image. Choose 1:1 pixels to inspect fine contours.
Each measurement produces one PNG for the entire range. More > Reveal files opens the saved result directory containing flicker.png, banding.png, and stripes.png. Captions embedded in each image identify the recording, region, range, units, and thresholds. Metadata files retain settings and aggregate summaries; there are no timeline images or per-frame metric arrays.
Analysis uses fixed image coordinates. Camera movement, object movement, exposure changes, and animation all contribute to temporal variation. Choose a static interval when investigating unwanted flicker. The images describe detected patterns, not their cause.
Read the three images
Flicker
The heatmap measures temporal variation independently at every pixel before combining results. Pixels flickering in opposite directions therefore remain visible even when average regional brightness stays constant.
Orange identifies luminance variation; cyan identifies color-only variation. Magenta identifies affected pixels where RGB variation is substantially stronger than luminance variation. Brighter colors mean greater instability. The scale is fixed: severity 1 is the detection threshold and severity 16 reaches full intensity. The dim source frame locates the evidence.
The caption reports population temporal standard deviation, variation relative to each pixel’s temporal mean brightness, consecutive-frame differences, and repeated brightness reversals. RGB deviation uses the largest channel deviation per pixel. Absolute and relative affected-area percentages are separate. A brightness floor prevents relative variation in dark pixels from becoming arbitrarily large.
A gradual brightness change can have high variation without repeated reversals. Read the reversal summary when distinguishing oscillation from drift. Recorded RGB code values are normalized to 0–1, luminance uses Rec.709 coefficients, and alpha is ignored. These are measurements of the recorded RGBA8 signal rather than calibrated display luminance.
Gradient banding
The image overlays contours supported by CAMBI’s spatial banding map. Red-to-yellow color indicates increasing strength; opacity indicates the fraction of selected frames containing that contour. A stationary band can be fully opaque while flicker is zero.
The managed CAMBI implementation is based on Netflix VMAF v3.2.1. Each frame is analyzed independently before temporal persistence is accumulated. Input uses rounded limited-range 8-bit luma from recorded RGB and the BT.1886 visibility model. The full-frame score uses upstream spatial and multiscale pooling. A custom region instead shows a regional CAMBI-derived score using full-frame spatial context. It is not a separately cropped standard CAMBI measurement.
If the recording dimensions do not support CAMBI, the banding image says unavailable. This does not imply zero banding; flicker and stripe measurements remain available.
Stripes / layers
Hue represents boundary orientation: red is 0°, yellow 30°, green 60°, cyan 90°, blue 120°, and magenta 150°. Orientation follows the boundary in top-left image coordinates and repeats at 180°. Opacity represents the most persistent compatible orientation/spacing family at each pixel. Spacing is measured perpendicular to the boundaries in source pixels.
The detector searches repeated directional boundaries at scales of 1, 2, 4, and 8 pixels. It requires at least three boundaries and reports the strongest recurring orientation/spacing families in the caption. Intentional patterns can also register. A single edge is not sufficient evidence of stripes.
Adjust sensitivity and use commands
Use get_game_view_resolution to read the main Game view’s selected preset and actual rendering dimensions in Edit Mode or Play Mode. Use set_game_view_resolution with integer width and height arguments, for example width: 1920 and height: 1080, to select an exact fixed-resolution preset. The command reuses a matching preset or creates one named Visual Debugger 1920x1080. Open a Game view first; Device Simulator and setting Free Aspect are not supported. Stop recording and wait for saving to finish before changing resolution.
Expand Advanced measurement settings to change sensitivity. Every setting is saved with the result; changing it creates a separate analysis identity. Use Adjust settings to prepare another analysis without changing the saved result.
Brightness floor: Default 0.05 on the 0–1 recorded brightness scale. Relative deviation divides by the larger of this floor and the pixel’s temporal mean brightness.
Absolute threshold: Default 1/255. Used for absolute affected-area reporting, significant brightness reversals, and directional edge detection. Relative threshold: Default 0.01, equivalent to 1%.
Stripe coherence: Default 0.7. Controls the fraction of a candidate boundary line supported by aligned edges. Stripe correlation: Default 0.5. Controls repetition strength. Orientation tolerance: Default 10°. Spacing tolerance: Default 0.2, equivalent to 20%.
CAMBI window: Default 65, range 15–65, sized for 3840 × 2160 and scaled to the recorded resolution. CAMBI topK: Default 0.6. CAMBI visibility: Default 0.019. CAMBI max log contrast: Default 2. Larger contrast settings include larger quantization steps.
Banding map threshold: Default 0.01. Persistent frame fraction: Default 0.8. A contour must appear in at least 80% of selected frames to count toward persistent contour area.
To request analysis through the Unity command interface, use visual_debugger_analyze with recording_id, analyzer: static_frame_stability, and optional first_frame and last_frame values. Frame numbers start at 1 and both endpoints are included. Omit the range to analyze the whole recording.
For a custom region, supply all four arguments: roi_x, roi_y, roi_width, and roi_height. Poll visual_debugger_analysis_status with the returned analysis_id until completion. The response lists saved artifacts. visual_debugger_analysis_list lists existing results and visual_debugger_analysis_delete removes one result without deleting its recording.
Analysis runs offline on a background worker and stops when recording starts. Recordings up to 3840 × 2160 pixels are supported, in landscape or portrait orientation. Memory is bounded by image dimensions rather than frame count. Each pixel keeps its 16 most frequent orientation/spacing families; any family present in more than 1/16 of the selected frames is always kept, so long or changing ranges never fail. Oversized requests fail explicitly; analysis does not discard frames or silently reduce resolution. Recordings and their analysis results follow the library’s local retention policy.
CAMBI includes third-party code under BSD-2-Clause-Patent. See the package’s Third Party Notices.txt for the covered files, upstream source, copyright, and complete license. First-party package content is distributed under the Standard Unity Asset Store EULA.