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.
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 129 B |
|
Before Width: | Height: | Size: 599 KiB After Width: | Height: | Size: 131 B |
|
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 131 B |
|
Before Width: | Height: | Size: 445 KiB After Width: | Height: | Size: 131 B |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 130 B |
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 131 B |