From 2a43deb0bef5ed5a4ac025292d7e8804b86c7bcb Mon Sep 17 00:00:00 2001 From: OpenCode Date: Thu, 4 Jun 2026 22:10:22 +0000 Subject: [PATCH] chore: remove one-shot avci patch scripts --- scripts/patch_avci_callsite.py | 52 --------------- scripts/patch_avci_classes.py | 113 --------------------------------- scripts/patch_avci_ui.py | 68 -------------------- 3 files changed, 233 deletions(-) delete mode 100644 scripts/patch_avci_callsite.py delete mode 100644 scripts/patch_avci_classes.py delete mode 100644 scripts/patch_avci_ui.py diff --git a/scripts/patch_avci_callsite.py b/scripts/patch_avci_callsite.py deleted file mode 100644 index b51da56..0000000 --- a/scripts/patch_avci_callsite.py +++ /dev/null @@ -1,52 +0,0 @@ -import sys - -# ── capture-manager.js: pass growingCodecName at the call site ────────────── -path = '/opt/wild-dragon/services/capture/src/capture-manager.js' -src = open(path).read() - -old_call = """ hlsDir: (sourceType === 'sdi' || sourceType === 'deltacast') ? sdiHlsDir : null, - videoCodec, - audioMap, - interlaced: isInterlacedSource, - });""" -new_call = """ hlsDir: (sourceType === 'sdi' || sourceType === 'deltacast') ? sdiHlsDir : null, - videoCodec, - growingCodecName: gCodec, - audioMap, - interlaced: isInterlacedSource, - });""" - -if old_call in src: - src = src.replace(old_call, new_call, 1) - open(path, 'w').write(src) - print('OK capture-manager.js call site patched') -else: - print('FAIL capture-manager.js call site not found') - sys.exit(1) - -# ── recorders.js: expand binary growing_codec guard ───────────────────────── -path2 = '/opt/wild-dragon/services/mam-api/src/routes/recorders.js' -src2 = open(path2).read() - -# Sidecar env GROWING_CODEC= -old_env = "`GROWING_CODEC=${recorder.growing_codec === 'hevc_nvenc' ? 'hevc_nvenc' : 'avci100'}`," -new_env = "`GROWING_CODEC=${['avci50','avci100','avci200','hevc_nvenc'].includes(recorder.growing_codec) ? recorder.growing_codec : 'avci100'}`," - -# startBody growing_codec -old_body = " growing_codec: recorder.growing_codec === 'hevc_nvenc' ? 'hevc_nvenc' : 'avci100'," -new_body = " growing_codec: ['avci50','avci100','avci200','hevc_nvenc'].includes(recorder.growing_codec) ? recorder.growing_codec : 'avci100'," - -ok = True -for old, new, label in [(old_env, new_env, 'GROWING_CODEC env'), (old_body, new_body, 'startBody growing_codec')]: - if old in src2: - src2 = src2.replace(old, new, 1) - print(f'OK recorders.js {label}') - else: - print(f'FAIL recorders.js {label}') - ok = False - -if ok: - open(path2, 'w').write(src2) - print('recorders.js written OK') -else: - sys.exit(1) diff --git a/scripts/patch_avci_classes.py b/scripts/patch_avci_classes.py deleted file mode 100644 index 27180b6..0000000 --- a/scripts/patch_avci_classes.py +++ /dev/null @@ -1,113 +0,0 @@ -import sys - -path = '/opt/wild-dragon/services/capture/src/capture-manager.js' -src = open(path).read() - -patches = [ - # 1. Replace static GROWING_VIDEO_ELEMENTARY_ARGS with a function - ( - """const GROWING_VIDEO_ELEMENTARY_ARGS = [ - '-c:v', 'libx264', '-profile:v', 'high422', '-level', '4.2', - '-preset', 'ultrafast', '-tune', 'zerolatency', - '-pix_fmt', 'yuv422p10le', - '-x264-params', 'avcintra-class=100:bframes=0:keyint=1:scenecut=0', - '-aud', '1', -]; -const GROWING_DEFAULT_BITRATE = '25M';""", - """// AVC-Intra elementary encode args per class (50 / 100 / 200). -const GROWING_AVCI_CLASS = { avci50: 50, avci100: 100, avci200: 200 }; -function growingVideoElementaryArgs(codec) { - const cls = GROWING_AVCI_CLASS[codec] || 100; - return [ - '-c:v', 'libx264', '-profile:v', 'high422', '-level', '4.2', - '-preset', 'ultrafast', '-tune', 'zerolatency', - '-pix_fmt', 'yuv422p10le', - '-x264-params', `avcintra-class=${cls}:bframes=0:keyint=1:scenecut=0`, - '-aud', '1', - ]; -} -const GROWING_DEFAULT_BITRATE = '25M';""", - 'GROWING_VIDEO_ELEMENTARY_ARGS -> growingVideoElementaryArgs()', - ), - # 2. growingCodec() / growingExtFor() — 4-way - ( - """const growingCodec = () => (process.env.GROWING_CODEC === 'hevc_nvenc' ? 'hevc_nvenc' : 'avci100'); -// File extension per growing codec. -const growingExtFor = (codec) => (codec === 'hevc_nvenc' ? 'mov' : 'mxf');""", - """// Valid growing codec values: 'avci50' | 'avci100' | 'avci200' | 'hevc_nvenc' -const GROWING_AVC_CODECS = new Set(['avci50', 'avci100', 'avci200']); -const growingCodec = () => { - const v = process.env.GROWING_CODEC; - if (v === 'hevc_nvenc') return 'hevc_nvenc'; - if (v === 'avci50') return 'avci50'; - if (v === 'avci200') return 'avci200'; - return 'avci100'; // default -}; -// File extension per growing codec. -const growingExtFor = (codec) => (codec === 'hevc_nvenc' ? 'mov' : 'mxf');""", - 'growingCodec() 4-way', - ), - # 3. deriveGrowingRaster signature — add codec param - ( - 'function deriveGrowingRaster(resolution, framerate, scanHint = null) {', - "function deriveGrowingRaster(resolution, framerate, scanHint = null, codec = 'avci100') {", - 'deriveGrowingRaster signature', - ), - # 4. rawFlag block — class-switch - ( - """ // AVC-Intra 100 raster flags. --avci100_1080p accepts true 1080p59.94 (verified). - let rawFlag; - if (height >= 1080) { - rawFlag = (scan === 'i') ? '--avci100_1080i' : '--avci100_1080p'; - } else if (height >= 720) { - rawFlag = '--avci100_720p'; - if (fpsNum == null) { r.ff = '60000/1001'; r.raw = '60000/1001'; } - } else { - rawFlag = '--mpeg2lg_422p_ml_576i'; - r.ff = '25'; r.raw = '25'; - }""", - """ // AVC-Intra raster flags — class from codec name ('avci50'/'avci100'/'avci200'). - const avciClass = GROWING_AVCI_CLASS[codec] || 100; - let rawFlag; - if (height >= 1080) { - rawFlag = (scan === 'i') ? `--avci${avciClass}_1080i` : `--avci${avciClass}_1080p`; - } else if (height >= 720) { - rawFlag = `--avci${avciClass}_720p`; - if (fpsNum == null) { r.ff = '60000/1001'; r.raw = '60000/1001'; } - } else { - rawFlag = '--mpeg2lg_422p_ml_576i'; - r.ff = '25'; r.raw = '25'; - }""", - 'rawFlag class-switch', - ), - # 5. _buildGrowingOrchestrator signature + deriveGrowingRaster call - ( - """ _buildGrowingOrchestrator({ inputArgs, videoBitrate, resolution, framerate, audioChannels, outPath, hlsDir, videoCodec, audioMap = '0:a:0?', interlaced = false }) { - const { rawFlag, frameRate, ffRate } = deriveGrowingRaster(resolution, framerate, interlaced ? 'i' : 'p');""", - """ _buildGrowingOrchestrator({ inputArgs, videoBitrate, resolution, framerate, audioChannels, outPath, hlsDir, videoCodec, growingCodecName = 'avci100', audioMap = '0:a:0?', interlaced = false }) { - const { rawFlag, frameRate, ffRate } = deriveGrowingRaster(resolution, framerate, interlaced ? 'i' : 'p', growingCodecName);""", - '_buildGrowingOrchestrator signature', - ), - # 6. Spread GROWING_VIDEO_ELEMENTARY_ARGS -> function call - ( - ' ...GROWING_VIDEO_ELEMENTARY_ARGS,', - ' ...growingVideoElementaryArgs(growingCodecName),', - 'spread -> growingVideoElementaryArgs(growingCodecName)', - ), -] - -ok = True -for old, new, label in patches: - if old in src: - src = src.replace(old, new, 1) - print(f' OK {label}') - else: - print(f' FAIL {label}') - ok = False - -if ok: - open(path, 'w').write(src) - print('capture-manager.js written OK') -else: - print('ABORTED — not writing (some patches failed)') - sys.exit(1) diff --git a/scripts/patch_avci_ui.py b/scripts/patch_avci_ui.py deleted file mode 100644 index a89bd3f..0000000 --- a/scripts/patch_avci_ui.py +++ /dev/null @@ -1,68 +0,0 @@ -import sys - -path = '/opt/wild-dragon/services/web-ui/public/screens-ingest.jsx' -src = open(path).read() - -patches = [ - # 1. growingCodec state initialiser — seed all 4 values - ( - """ const [growingCodec, setGrowingCodec] = React.useState(recorder.growing_codec === 'hevc_nvenc' ? 'hevc_nvenc' : 'avci100');""", - """ const _validGC = new Set(['avci50','avci100','avci200','hevc_nvenc']); - const [growingCodec, setGrowingCodec] = React.useState(_validGC.has(recorder.growing_codec) ? recorder.growing_codec : 'avci100');""", - 'growingCodec state seed', - ), - # 2. options', - ), - # 3. Hint text below the select - ( - """ {growingCodec === 'hevc_nvenc' - ? 'GPU-offloaded HEVC 10-bit 4:2:0 in fragmented MOV. Frees CPU. NOTE: not all editors import frag-MOV growing files.' - : 'CPU AVC-Intra 100, 4:2:2 10-bit, true 1080p59.94 in MXF OP1a. Premiere-native growing.'}""", - """ {growingCodec === 'hevc_nvenc' - ? 'GPU-offloaded HEVC 10-bit 4:2:0 in fragmented MOV. NOTE: Premiere does not import frag-MOV growing files.' - : growingCodec === 'avci50' - ? 'AVC-Intra Class 50 — ~100 Mbps @ 1080p59.94. Lowest storage, broadcast-grade 4:2:2 10-bit. Premiere-native.' - : growingCodec === 'avci200' - ? 'AVC-Intra Class 200 — ~400 Mbps @ 1080p59.94. Highest quality, 4:2:2 10-bit. Premiere-native.' - : 'AVC-Intra Class 100 — ~200 Mbps @ 1080p59.94. Balanced quality and storage. Premiere-native.'}""", - 'hint text', - ), - # 4. _normRecorder growingCodec — expand to 4-way - ( - " growingCodec: r.growing_codec === 'hevc_nvenc' ? 'hevc_nvenc' : 'avci100',", - """ growingCodec: (['avci50','avci100','avci200','hevc_nvenc'].includes(r.growing_codec) ? r.growing_codec : 'avci100'),""", - '_normRecorder growingCodec', - ), - # 5. GROWING badge label — show avci class - ( - """ GROWING · {recorder.growingCodec === 'hevc_nvenc' ? 'GPU/HEVC' : 'CPU/AVCI'}""", - """ GROWING · {recorder.growingCodec === 'hevc_nvenc' ? 'GPU/HEVC' - : recorder.growingCodec === 'avci50' ? 'CPU/AVCI-50' - : recorder.growingCodec === 'avci200' ? 'CPU/AVCI-200' - : 'CPU/AVCI-100'}""", - 'GROWING badge label', - ), -] - -ok = True -for old, new, label in patches: - if old in src: - src = src.replace(old, new, 1) - print(f'OK {label}') - else: - print(f'FAIL {label}') - ok = False - -if ok: - open(path, 'w').write(src) - print('screens-ingest.jsx written OK') -else: - sys.exit(1)