build(lfs): track tests/*/src/*.png via Git LFS (#376)

## Summary

Track `tests/*/src/*.png` via Git LFS to mirror the existing policy for golden videos and `.mp4` fixtures.

## Why

`Chunk 11C` of `plans/hdr-followups.md`. Without this rule, regression suites that grow PNG fixtures over time would bloat the working-tree history and slow shallow clones.

## What changed

- `.gitattributes`: add `tests/*/src/*.png` to the LFS-tracked patterns.
- Migrates the six existing PNG fixtures (1.6 MB combined: `hdr-photo-pq.png` plus `heygen-promo-preview-assets/` screenshots) onto LFS in the same commit so the rule applies retroactively.

## Test plan

- [x] `git lfs ls-files` includes the HDR PNG fixtures after commit.
- [x] Working tree size for these files goes from 1.6 MB to 6 × ~130 B LFS pointers.

## Stack

Chunk 11C of `plans/hdr-followups.md`. Independent of all code changes.
This commit is contained in:
Vance Ingalls
2026-04-23 09:31:48 -07:00
committed by GitHub
parent c11a332ef8
commit 3089c8ee3a
11 changed files with 19 additions and 0 deletions
+3
View File
@@ -4,6 +4,9 @@ packages/producer/tests/*/output/output.mp4 filter=lfs diff=lfs merge=lfs -text
# Source video clips for regression test fixtures (HDR samples, etc.)
packages/producer/tests/*/src/*.mp4 filter=lfs diff=lfs merge=lfs -text
# Source image assets for regression test fixtures (HDR PNGs, screenshot fixtures, etc.)
packages/producer/tests/*/src/*.png filter=lfs diff=lfs merge=lfs -text
# GitHub Linguist overrides — HTML files are compositions (user content / templates),
# not the framework source. Hide them from the repo language stats so TypeScript,
# which is the actual implementation, surfaces as the dominant language.
+12
View File
@@ -45,6 +45,8 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
@@ -60,6 +62,8 @@ jobs:
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
@@ -73,6 +77,8 @@ jobs:
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
@@ -88,6 +94,8 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
@@ -104,6 +112,8 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
@@ -119,6 +129,8 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
+2
View File
@@ -60,6 +60,7 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref }}
lfs: true
- name: Show platform info
shell: pwsh
@@ -222,6 +223,7 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref }}
lfs: true
# -----------------------------------------------------------------
# Install FFmpeg so vitest suites that gate on `HAS_FFMPEG`
@@ -439,6 +439,7 @@ describe("buildEncoderArgs HDR color space", () => {
expect(args[paramIdx + 1]).not.toContain("max-cll");
});
it("strips HDR and tags as SDR/BT.709 when codec=h264 (libx264 has no HDR support)", () => {
// libx264 cannot encode HDR. Rather than emit a "half-HDR" file (BT.2020
// container tags + BT.709 VUI inside the bitstream — confusing to HDR-aware
@@ -418,6 +418,7 @@ export async function extractAllVideoFrames(
const hdrInfo = analyzeCompositionHdr(videoColorSpaces);
if (hdrInfo.hasHdr && hdrInfo.dominantTransfer) {
// dominantTransfer is "majority wins" — if a composition mixes PQ and HLG
// sources (rare but legal), the minority transfer's videos get converted
// with the wrong curve. We treat this as caller-error: a single composition
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 599 KiB

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 KiB

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 131 B