Source: https://guthlabs.ai/docs/instruments/frame-rate-conversion-pulldown-calculator/mechanism/

instrument mechanism / verified-clean

# Frame Rate Conversion / Pulldown Calculator mechanism

The inspectable method record for Frame Rate Conversion / Pulldown Calculator, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The arithmetic formula is sound under explicit seconds and frames-per-second units, but the instrument claim is incomplete for frame-count inputs and ambiguous for pulldown. The honest label must distinguish exact 23.976-to-29.97 telecine from nominal 24-to-29.97 conversion and must disclose any fractional-frame or rounding behavior.

- newFrames=duration*newFps is correct only when duration is explicitly in seconds and is preserved during conversion.

- For a source frame-count input, the required formula is convertedFrames=(sourceFrameCount/sourceFps)*targetFps; this is not stated.

- A 3:2 pulldown cadence is exact for 23.976 fps to 29.97 fps when those rates are interpreted as 24000/1001 and 30000/1001. It is not an exact duration-preserving conversion from 24 fps to 29.97 fps because 29.97/24 is not exactly 5/4.

- The cadence phase and ordering are unspecified: 2:3 and 3:2 can describe the same cadence with different starting phases. The actual field pattern should be specified, such as 2:3:2:3 fields per four source frames.

- The specification does not state how fractional converted frame counts are rounded, accumulated, or represented when the result is not an integer.

## Units and conventions

- Duration is measured in seconds.

- Frame rates are measured in frames per second.

- For standard broadcast rates, 23.976 means exactly 24000/1001 fps and 29.97 means exactly 30000/1001 fps, rather than approximate decimal rates.

- A duration-preserving frame-rate conversion may produce a fractional nominal frame count; an encoded output must define an integer-frame or timebase policy.

- Pulldown cadence is a field-display pattern, so the field order and starting phase must be defined.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "sourceFps": 24,
    "targetFps": 30,
    "durationSeconds": 10
  },
  "expected_outputs": {
    "convertedDurationSeconds": 10,
    "newFrames": 300
  },
  "working": "newFrames = duration × targetFps = 10 s × 30 frames/s = 300 frames. Duration remains 10 s because the conversion is duration-preserving."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The specification exposes two failure modes: a zero source frame rate causes an undefined duration, and the 24-to-29.97 pulldown branch produces a nominal 30 cadence frames for one second of 24-fps material while direct arithmetic produces 29.97. The duration field also has an unresolved seconds-versus-frames convention ambiguity.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/frame-rate-conversion-pulldown-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/frame-rate-conversion-pulldown-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/frame-rate-conversion-pulldown-calculator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
