# PIV Desk > A particle image velocimetry (PIV) desk at https://piv-desk.skillsafe.ai/. Drop one image pair (frame A, frame B) or generate a synthetic pair with a known field; the browser runs the openpiv 0.25.4 single-pass pipeline on it for free - windowed FFT cross-correlation, sub-pixel peaks, signal-to-noise validation, outlier replacement, scaling, vorticity - and flags what makes a field untrustworthy. A metered run (model gpt-terra) then reviews what the vector field supports, or writes an openpiv script that reproduces it and runs follow-up checks. Derived from the agent skill @k-dense-ai/openpiv (k-dense-ai/scientific-agent-skills). ## What the free lane computes (in the browser, nothing uploaded) - Reads PNG (8/16-bit), uncompressed TIFF (8/16-bit), BMP and JPEG the way openpiv's tools.imread (imageio) presents them: greyscale files keep their stored values; colour files go through openpiv's rgb2gray (weights 0.299, 0.587, 0.144) and int32 truncation. - pyprocess.extended_search_area_piv: windows of the search-area size starting at the top-left corner; with search area > window both windows are intensity-normalised and frame A is masked to its central window; linear (zero-padded) or circular FFT correlation; Gaussian, centroid or parabolic sub-pixel peak; peak2peak or peak2mean signal-to-noise ratio. - get_coordinates (labels centred on the image), sig2noise_val, optional global_val and local_median_val (thresholds entered in px per frame and applied in px/s), replace_outliers (localmean, disk or distance), drop_invalid, scaling.uniform, transform_coordinates, and the skill's analyze.py (grid spacing, axis signs, vorticity, strain, single-pair mean and RMS). - Page diagnostics: flagged share, the quarter-window rule, peak locking (share of sub-pixel parts within 0.1 px of a whole pixel), border peaks, a particle-image count per window, saturation, region summary (3 x 3), and for synthetic pairs the RMS error against the true field. - The settings loop: editing a setting re-runs PIV on the same pair, and a table compares every try (vectors, flagged share, median s2n, max displacement, truth RMS for synthetic pairs, the browser's read) against a chosen baseline, with one click to go back to any earlier settings. A ruler helper turns "N px = L mm" into openpiv's scaling. - Exports: vectors.txt in openpiv's tools.save format, CSV, report JSON (with the facts), Markdown summary, the skill's runner.py command line, and for synthetic pairs frame_a.png / frame_b.png (8-bit greyscale PNGs openpiv reads back exactly). Checked against openpiv 0.25.4 on 526 image pairs (490 random synthetic pairs and OpenPIV's six bundled test pairs), 175,637 vectors: all but 6 raw vectors agree within 0.001 px per frame and every signal-to-noise ratio within 0.01%; the 6 are in openpiv's single-precision normalised path. ## The metered lanes (task field) - review: verdict (sound / caveated / unreliable, never looser than the browser's read unless the flags behind it are dismissed), a reading of every metric, the measured field in words, processing changes to try, the user's claims judged against the facts, a methods paragraph stating the exact settings, and what one pair cannot show. - script: follow-up fixes and one openpiv script that reads the same frames, calls extended_search_area_piv with every setting the browser used, checks an EXPECTED dict of browser values with math.isclose, replaces outliers, scales, saves vectors.txt and applies the fixes. Input: {task, title, context, facts (JSON string built by the page), question?, decision? (script only)}. The model never sees the images and is told never to compute a new number; the page reconciles every reply against the browser's facts. API: https://piv-desk.skillsafe.ai/api.html ## Limits One image pair measures in-plane displacements in the light sheet; it is not an ensemble, so the RMS values are spatial spread, not turbulence statistics. Single pass only (the review may suggest windef multi-pass). Compressed TIFF, 16-bit colour stacks and images above 16 megapixels are not read. ## Source Agent skill: https://skillsafe.ai/skill/@k-dense-ai/openpiv (repository https://github.com/k-dense-ai/scientific-agent-skills, skills/openpiv). OpenPIV: https://github.com/OpenPIV/openpiv-python. No OpenPIV code or data is included; see https://piv-desk.skillsafe.ai/NOTICE.txt