Repository navigation
Expand file tree
/
Copy pathpackage.json
More file actions
284 lines (284 loc) · 33.5 KB
/
Copy pathpackage.json
File metadata and controls
284 lines (284 loc) · 33.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
{
"name": "videorc",
"version": "0.9.0",
"private": true,
"description": "AI-native recording and livestreaming studio for creators.",
"author": "TheOrcDev",
"license": "AGPL-3.0-only",
"packageManager": "pnpm@11.0.9",
"engines": {
"node": ">=24.0.0 <25",
"pnpm": ">=11.0.0 <12"
},
"scripts": {
"probe:youtube-efficiency": "node scripts/probe-youtube-efficiency.mjs",
"dev": "pnpm --filter @videorc/desktop dev",
"dev:zerocopy": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ZEROCOPY_SOURCES=1 -- pnpm --filter @videorc/desktop dev",
"build": "pnpm --filter @videorc/desktop build",
"typecheck": "pnpm --filter @videorc/desktop typecheck",
"check:windows": "node scripts/run-with-env.mjs --platform=darwin --prepend-path=/opt/homebrew/opt/llvm/bin XWIN_ACCEPT_LICENSE=1 -- cargo xwin check -p videorc-backend --target x86_64-pc-windows-msvc",
"lint": "eslint \"apps/desktop/**/*.{ts,tsx}\" && pnpm check:em-dashes",
"format": "prettier --write \"apps/desktop/**/*.{ts,tsx,css,json,html}\" \"*.{json,js,cjs,mjs}\" \".github/workflows/*.yml\" \"scripts/{comments-window-probe,*capture-decay*,*macos-d3*,smoke-live-control-recycle,smoke-record-latency-app,smoke-recording-matrix-app,smoke-system-audio-app,smoke-recording-session-decay,upload-macos-beta-release}.mjs\" \"scripts/lib/{app-launcher*,capture-decay-*,live-control-recycle-smoke*,macos-d3-*,performance-workflow*,record-latency-gate*,recording-studio-gates*,release-upload-*,remote-control-client*,system-audio-gates*,transient-fifo-pressure-gates*}.mjs\"",
"format:check": "node scripts/check-text-files.mjs && prettier --check \"apps/desktop/**/*.{ts,tsx,css,json,html}\" \"*.{json,js,cjs,mjs}\" \".github/workflows/*.yml\" \"scripts/{comments-window-probe,*capture-decay*,*macos-d3*,smoke-live-control-recycle,smoke-record-latency-app,smoke-recording-matrix-app,smoke-system-audio-app,smoke-recording-session-decay,upload-macos-beta-release}.mjs\" \"scripts/lib/{app-launcher*,capture-decay-*,live-control-recycle-smoke*,macos-d3-*,performance-workflow*,record-latency-gate*,recording-studio-gates*,release-upload-*,remote-control-client*,system-audio-gates*,transient-fifo-pressure-gates*}.mjs\"",
"audit:js": "pnpm audit --prod --audit-level high",
"audit:rust": "node scripts/audit-rust.mjs",
"audit:deps": "pnpm audit:js && pnpm audit:rust",
"changelog:build": "node scripts/build-changelog.mjs",
"changelog:check": "node scripts/build-changelog.mjs --check",
"check:renderer-assets": "node scripts/check-renderer-asset-budget.mjs",
"check:text-files": "node scripts/check-text-files.mjs",
"check:em-dashes": "node scripts/check-em-dashes.mjs",
"changelog:email": "node scripts/changelog-email.mjs",
"release:notify:discord": "node scripts/notify-discord-release.mjs",
"ffmpeg:build:macos": "bash scripts/build-ffmpeg-macos.sh",
"ffmpeg:fetch:windows": "node scripts/fetch-ffmpeg-windows.mjs",
"ffmpeg:fetch:linux": "node scripts/fetch-ffmpeg-linux.mjs",
"build:native-preview-addon": "node scripts/build-native-preview-addon.mjs",
"build:native-preview-addon:release": "node scripts/build-native-preview-addon.mjs --release --universal",
"package:backend": "cargo build --release -p videorc-backend",
"package:desktop:linux": "pnpm package:backend && pnpm ffmpeg:fetch:linux && node scripts/preflight-linux-package.mjs && pnpm --filter @videorc/desktop package:linux",
"package:backend:macos": "cargo build --release -p videorc-backend --bin videorc-backend --bin native_preview_host_helper && pnpm build:native-preview-addon:release",
"package:preflight:macos": "node scripts/preflight-macos-package.mjs",
"package:preflight:windows": "node scripts/preflight-windows-package.mjs",
"package:preflight:linux": "node scripts/preflight-linux-package.mjs",
"package:windows:nsis-prewarm": "node scripts/windows-nsis-prewarm.mjs",
"release:preflight:macos": "node scripts/preflight-macos-release.mjs",
"release:secrets:macos": "node scripts/check-macos-release-secrets.mjs",
"release:upload:preflight:macos": "node scripts/preflight-macos-release-upload.mjs",
"release:validate:macos": "node scripts/validate-macos-release-artifact.mjs",
"release:manifest:macos": "node scripts/generate-macos-beta-manifest.mjs",
"release:verify:capture-decay-d3": "node scripts/verify-macos-capture-decay-d3.mjs",
"release:validate:capture-decay-d3-evidence": "node scripts/verify-capture-decay-release-acceptance.mjs",
"release:derive:capture-decay-d3-destination-binding": "node scripts/derive-macos-d3-destination-binding.mjs",
"release:candidate:stage:macos-d3": "node scripts/stage-macos-d3-sealed-candidate.mjs",
"release:candidate:download:macos-d3": "node scripts/download-macos-d3-sealed-candidate.mjs",
"release:candidate:verify:macos-d3": "node scripts/verify-macos-d3-sealed-candidate.mjs",
"release:create:capture-decay-debug-provenance": "node scripts/create-capture-decay-debug-runner-provenance.mjs",
"release:upload:macos": "node scripts/upload-macos-beta-release.mjs",
"release:sync:origins": "node scripts/sync-release-origins.mjs",
"release:preflight:windows": "node scripts/preflight-windows-release.mjs",
"release:secrets:windows": "node scripts/check-windows-release-secrets.mjs",
"release:upload:preflight:windows": "node scripts/preflight-windows-release-upload.mjs",
"release:validate:windows": "node scripts/validate-windows-release-artifact.mjs",
"release:manifest:windows": "node scripts/generate-windows-alpha-manifest.mjs",
"release:staging:write:windows": "node scripts/windows-unsigned-staging.mjs --write",
"release:staging:verify:windows": "node scripts/windows-unsigned-staging.mjs --verify",
"release:staging:write-signed:windows": "node scripts/windows-unsigned-staging.mjs --write-signed",
"release:staging:verify-signed:windows": "node scripts/windows-unsigned-staging.mjs --verify-signed",
"release:candidate:upload:windows": "node scripts/windows-release-candidate-upload.mjs",
"release:candidate:download:windows": "node scripts/windows-release-candidate-download.mjs",
"release:candidate:verify:windows": "node scripts/windows-release-candidate-verify.mjs",
"release:acceptance:windows": "node scripts/windows-acceptance-record-resolve.mjs",
"release:upload:windows": "node scripts/upload-windows-alpha-release.mjs",
"release:preflight:linux": "node scripts/preflight-linux-release.mjs",
"release:secrets:linux": "node scripts/check-linux-release-secrets.mjs",
"release:validate:linux": "node scripts/validate-linux-release-artifact.mjs",
"release:manifest:linux": "node scripts/generate-linux-alpha-manifest.mjs",
"release:candidate:upload:linux": "node scripts/upload-linux-alpha-release.mjs",
"sign:desktop:local": "node scripts/sign-macos-local-app.mjs",
"package:desktop": "pnpm package:backend:macos && pnpm ffmpeg:build:macos && pnpm package:preflight:macos && pnpm --filter @videorc/desktop package",
"package:desktop:signed-local": "pnpm package:desktop && pnpm sign:desktop:local",
"dist:desktop:signed-local": "pnpm package:desktop:signed-local && cd apps/desktop && pnpm exec electron-builder --mac dmg --prepackaged release/mac-arm64 --config.mac.identity=null --config.mac.notarize=false --config.dmg.sign=false && cd ../.. && pnpm release:manifest:macos",
"package:desktop:windows": "pnpm package:backend && pnpm ffmpeg:fetch:windows && pnpm ffmpeg:build:capture:windows && pnpm package:preflight:windows && pnpm --filter @videorc/desktop package",
"dist:desktop:windows": "pnpm package:backend && pnpm ffmpeg:fetch:windows && pnpm ffmpeg:build:capture:windows && pnpm package:preflight:windows && pnpm --filter @videorc/desktop dist",
"package:desktop:windows:unsigned": "pnpm changelog:check && pnpm release:preflight:windows && pnpm package:backend && node scripts/fetch-ffmpeg-windows.mjs --force && pnpm ffmpeg:build:capture:windows && pnpm package:preflight:windows && pnpm --filter @videorc/desktop package:windows:unsigned && pnpm package:windows:nsis-prewarm && pnpm release:staging:write:windows",
"dist:desktop:windows:prepackaged": "pnpm release:staging:verify-signed:windows && pnpm --filter @videorc/desktop dist:windows:prepackaged && pnpm release:manifest:windows",
"dist:desktop:windows:signed": "pnpm dist:desktop:windows:prepackaged",
"dist:desktop:windows:release": "pnpm dist:desktop:windows:signed && pnpm release:validate:windows",
"dist:desktop": "pnpm package:backend:macos && pnpm ffmpeg:build:macos && pnpm package:preflight:macos && pnpm --filter @videorc/desktop dist",
"dist:desktop:signed": "pnpm release:preflight:macos && pnpm package:backend:macos && pnpm ffmpeg:build:macos && pnpm package:preflight:macos && pnpm --filter @videorc/desktop dist:signed && pnpm release:manifest:macos",
"dist:desktop:release": "pnpm release:preflight:macos && pnpm package:backend:macos && pnpm ffmpeg:build:macos && pnpm package:preflight:macos && pnpm --filter @videorc/desktop dist:release && pnpm release:manifest:macos",
"analyze:recording": "node scripts/analyze-recording.mjs",
"analyze:startup": "node scripts/analyze-startup-resolution.mjs",
"probe:video-understanding": "node scripts/video-understanding-probe.mjs",
"ui:driver": "node scripts/ui-driver.mjs",
"ui:cmd": "node scripts/ui-cmd.mjs",
"test:analyzer": "node --test scripts/lib/recording-analyzer.test.mjs",
"icons:build": "node scripts/build-icons.mjs",
"test:scripts": "node --test scripts/lib/*.test.mjs",
"perf:scenario": "node scripts/performance-scenario-runner.mjs",
"perf:scenario:list": "node scripts/performance-scenario-runner.mjs --list",
"perf:calibrate": "node scripts/aggregate-performance-calibration.mjs",
"perf:budget:preflight": "node scripts/performance-budget-preflight.mjs",
"baseline:real-source": "node scripts/real-source-baseline-app.mjs",
"baseline:real-source:raw-yuv": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=raw-yuv420p -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:videotoolbox-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264 -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:videotoolbox-mpegts-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:motion-mpegts-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_SCREEN_MOTION_STIMULUS=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:4k30": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_WIDTH=3840 VIDEORC_BASELINE_HEIGHT=2160 VIDEORC_BASELINE_FPS=30 VIDEORC_BASELINE_BITRATE_KBPS=30000 VIDEORC_BASELINE_SCREEN_MOTION_STIMULUS=1 -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:4k30:av-sync": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_WIDTH=3840 VIDEORC_BASELINE_HEIGHT=2160 VIDEORC_BASELINE_FPS=30 VIDEORC_BASELINE_BITRATE_KBPS=30000 VIDEORC_BASELINE_AV_SYNC_STIMULUS=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:4k30:endurance": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_WIDTH=3840 VIDEORC_BASELINE_HEIGHT=2160 VIDEORC_BASELINE_FPS=30 VIDEORC_BASELINE_BITRATE_KBPS=30000 VIDEORC_BASELINE_SCREEN_MOTION_STIMULUS=1 VIDEORC_BASELINE_RECORDING_MS=600000 VIDEORC_SMOKE_TIMEOUT_MS=900000 -- node scripts/real-source-baseline-app.mjs",
"baseline:evidence:4k30": "node scripts/check-real-source-evidence.mjs --require-motion --min-recording-ms=60000",
"baseline:evidence:4k30:endurance": "node scripts/check-real-source-evidence.mjs --require-motion --min-recording-ms=600000",
"baseline:real-source:av-sync-mpegts-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_AV_SYNC_STIMULUS=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"baseline:stream:av-sync": "node scripts/stream-av-sync-baseline.mjs",
"baseline:stream:caption-burn-av-sync": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_CAPTIONS=1 VIDEORC_BASELINE_CAPTION_BURN_TARGET=stream VIDEORC_BASELINE_CAPTION_OVERLAY_STIMULUS=1 -- node scripts/stream-av-sync-baseline.mjs",
"baseline:stream:av-sync:endurance": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_RECORDING_MS=600000 VIDEORC_SMOKE_TIMEOUT_MS=900000 -- node scripts/stream-av-sync-baseline.mjs",
"baseline:stream:split-output-4k-record:base": "node scripts/stream-av-sync-baseline.mjs --skip-record-only --require-split-output-4k-record",
"baseline:stream:split-output-4k-record": "pnpm baseline:stream:split-output-4k-record:base --gate",
"baseline:stream:youtube-4k30": "node scripts/stream-av-sync-baseline.mjs --gate --skip-record-only --require-youtube-4k-stream",
"baseline:stream:youtube-4k30:mixed": "node scripts/stream-av-sync-baseline.mjs --gate --skip-record-only --require-mixed-youtube-4k-twitch-1080p",
"baseline:real-source:camera-mpegts-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_NO_SCREEN=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"baseline:real-source:camera-mpegts-output:no-preview": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_NO_SCREEN=1 VIDEORC_BASELINE_NO_PREVIEW_SURFACE=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- node scripts/real-source-baseline-app.mjs",
"acceptance:obs-side-by-side": "node scripts/obs-side-by-side-acceptance.mjs",
"measure:av-sync": "node scripts/measure-av-sync.mjs",
"smoke:dev": "node scripts/smoke-dev-app.mjs",
"smoke:recording-matrix": "node scripts/smoke-recording-matrix-app.mjs",
"smoke:session-decay": "node scripts/smoke-recording-session-decay.mjs",
"smoke:capture-decay-soak": "node scripts/smoke-capture-decay-soak.mjs",
"smoke:capture-decay-soak:investigate": "node scripts/smoke-capture-decay-soak.mjs",
"smoke:capture-decay-soak:quick": "node scripts/run-with-env.mjs VIDEORC_SOAK_REAL_SOURCES=0 VIDEORC_DECAY_REAL_SCREEN=0 VIDEORC_DECAY_REAL_CAMERA=0 VIDEORC_DECAY_PACKAGED_APP=0 VIDEORC_SMOKE_PACKAGED_APP=0 VIDEORC_PACKAGED_SMOKE_TEST=0 VIDEORC_SOAK_MINUTES=1 VIDEORC_SOAK_SAMPLE_SECONDS=1 VIDEORC_SOAK_SURFACE_SLOPE_MINIMUM_MINUTES=0 -- node scripts/smoke-capture-decay-soak.mjs --gate --synthetic",
"smoke:capture-decay-soak:contract": "node --test scripts/lib/capture-decay-soak.test.mjs",
"smoke:capture-decay-soak:real-release": "node scripts/run-capture-decay-real-release.mjs",
"smoke:capture-decay-soak:real-release:recovery": "node scripts/run-capture-decay-real-release.mjs --recovery",
"smoke:capture-decay-soak:gate": "node scripts/run-with-env.mjs VIDEORC_SOAK_REAL_SOURCES=0 VIDEORC_SOAK_CAMERA_ID= VIDEORC_SOAK_SCREEN_ID= VIDEORC_SOAK_DEBUG_APP_EXECUTABLE= VIDEORC_SCREEN_MOTION_VERIFY_VISIBLE=0 VIDEORC_SYNTHETIC_HARD_CONTENT=1 VIDEORC_SMOKE_PREVIEW_MOTION=1 VIDEORC_NATIVE_PREVIEW_SURFACE=1 VIDEORC_DISABLE_AUTO_PREVIEW=1 VIDEORC_METAL_COMPOSITOR=1 VIDEORC_SOAK_REQUIRE_NATIVE_PREVIEW=1 VIDEORC_SOAK_REQUIRE_PRESENTER_ADVANCEMENT=1 VIDEORC_SOAK_REQUIRE_METAL_COMPOSITOR=1 VIDEORC_SOAK_MIN_PREVIEW_PRESENT_FPS=1 VIDEORC_SOAK_MAX_PREVIEW_FRAME_AGE_MS=1000 VIDEORC_SOAK_MAX_PREVIEW_LATENCY_P95_MS=1000 VIDEORC_SOAK_MINUTES=60 VIDEORC_SOAK_SAMPLE_SECONDS=2 VIDEORC_SMOKE_TIMEOUT_MS=420000 VIDEORC_SOAK_RPC_TIMEOUT_MS=5000 VIDEORC_SOAK_SOURCE_READY_TIMEOUT_MS=90000 VIDEORC_SOAK_SOURCE_READY_POLL_MS=2000 VIDEORC_SOAK_SOURCE_READY_CONSECUTIVE_POLLS=3 VIDEORC_SOAK_SURFACE_RELEASE_TIMEOUT_MS=10000 VIDEORC_SOAK_REAL_SOURCE_FAILURE_CONSECUTIVE_SAMPLES=3 VIDEORC_SOAK_MAX_RECOVERY_DURATION_MS=4000 VIDEORC_SOAK_MAX_RECOVERY_DETECTION_MS=6000 VIDEORC_SOAK_MIN_SAMPLE_COVERAGE=0.95 VIDEORC_SOAK_MAX_SAMPLE_GAP_MS=6000 VIDEORC_SOAK_MAX_SURFACE_LIVE_COUNT=12 VIDEORC_SOAK_MAX_SURFACE_PEAK_COUNT=16 VIDEORC_SOAK_MAX_SURFACE_SLOPE_PER_MINUTE=0.05 VIDEORC_SOAK_SURFACE_SLOPE_MINIMUM_MINUTES=10 VIDEORC_SOAK_SURFACE_GROWTH_ALLOWANCE=2 VIDEORC_SOAK_MIN_REAL_SOURCE_RATE_FRACTION=0.6 VIDEORC_SOAK_MAX_REAL_SOURCE_AGE_MS=1000 VIDEORC_SOAK_WIDTH=1280 VIDEORC_SOAK_HEIGHT=720 VIDEORC_SOAK_FPS=30 VIDEORC_SOAK_BITRATE_KBPS=4000 VIDEORC_DECAY_REAL_SCREEN=0 VIDEORC_DECAY_REAL_CAMERA=0 VIDEORC_DECAY_PACKAGED_APP=0 VIDEORC_SMOKE_PACKAGED_APP=0 VIDEORC_PACKAGED_SMOKE_TEST=0 -- node scripts/smoke-capture-decay-soak.mjs --release-gate --gate --synthetic",
"smoke:capture-decay-soak:recovery": "pnpm smoke:capture-decay-soak:recovery:investigate",
"smoke:capture-decay-soak:recovery:investigate": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_SOAK_REAL_SOURCES=1 VIDEORC_SOAK_MINUTES=1 -- node scripts/smoke-capture-decay-soak.mjs --gate --recovery-gate",
"smoke:capture-decay-soak:long-recording": "node scripts/run-with-env.mjs VIDEORC_SOAK_LONG_RECORDING_MINUTES=15 VIDEORC_DECAY_RECORDING_MS=900000 VIDEORC_DECAY_MIN_RECORDING_RATIO=0.97 VIDEORC_SMOKE_TIMEOUT_MS=1200000 VIDEORC_DECAY_RPC_TIMEOUT_MS=10000 VIDEORC_DECAY_FINALIZATION_TIMEOUT_MS=60000 VIDEORC_DECAY_STATUS_POLL_MS=2000 VIDEORC_DECAY_SESSIONS=1 VIDEORC_DECAY_IDLE_MS=0 VIDEORC_DECAY_REAL_SCREEN=0 VIDEORC_DECAY_REAL_CAMERA=0 VIDEORC_DECAY_CAMERA_ID= VIDEORC_DECAY_PACKAGED_APP=0 VIDEORC_SMOKE_PACKAGED_APP=0 VIDEORC_PACKAGED_SMOKE_TEST=0 VIDEORC_SOAK_REAL_SOURCES=0 VIDEORC_CAPTURE_DECAY_LONG_RECORDING=1 VIDEORC_PACKAGED_APP_EXECUTABLE= VIDEORC_SYNTHETIC_HARD_CONTENT=1 VIDEORC_ENCODER_BRIDGE=1 VIDEORC_RECORDING_ENCODER_BRIDGE=1 VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts VIDEORC_NATIVE_PREVIEW_SURFACE=1 VIDEORC_DISABLE_AUTO_PREVIEW=0 VIDEORC_METAL_COMPOSITOR=1 VIDEORC_SOAK_REQUIRE_NATIVE_PREVIEW=1 VIDEORC_SOAK_REQUIRE_PRESENTER_ADVANCEMENT=1 VIDEORC_SOAK_REQUIRE_METAL_COMPOSITOR=1 VIDEORC_SOAK_REQUIRE_RELEASE_RECORDING_PATH=1 VIDEORC_SOAK_MIN_PREVIEW_PRESENT_FPS=1 VIDEORC_SOAK_MAX_PREVIEW_FRAME_AGE_MS=1000 VIDEORC_SOAK_MAX_PREVIEW_LATENCY_P95_MS=1000 VIDEORC_DECAY_WIDTH=1920 VIDEORC_DECAY_HEIGHT=1080 VIDEORC_DECAY_FPS=30 VIDEORC_DECAY_BITRATE_KBPS=6000 VIDEORC_SOAK_MIN_SAMPLE_COVERAGE=0.95 VIDEORC_SOAK_MAX_SAMPLE_GAP_MS=6000 VIDEORC_SOAK_MAX_SURFACE_LIVE_COUNT=12 VIDEORC_SOAK_MAX_SURFACE_PEAK_COUNT=16 VIDEORC_SOAK_MAX_SURFACE_SLOPE_PER_MINUTE=0.05 VIDEORC_SOAK_SURFACE_SLOPE_MINIMUM_MINUTES=10 VIDEORC_SOAK_SURFACE_GROWTH_ALLOWANCE=2 -- node scripts/smoke-capture-decay-long-recording.mjs --release-gate",
"smoke:capture-decay-soak:long-recording:investigate": "node scripts/smoke-capture-decay-long-recording.mjs",
"smoke:capture-decay-soak:long-recording:endurance": "node scripts/smoke-capture-decay-long-recording.mjs --endurance",
"smoke:session-decay:gate": "node scripts/run-with-env.mjs VIDEORC_DECAY_SESSIONS=3 VIDEORC_DECAY_RECORDING_MS=10000 VIDEORC_DECAY_IDLE_MS=1000 -- node scripts/smoke-recording-session-decay.mjs",
"smoke:linux-encoder-acceptance": "node scripts/smoke-linux-encoder-acceptance.mjs",
"smoke:linux-av-devices": "node scripts/smoke-linux-av-devices.mjs",
"smoke:linux-portal-capture": "node scripts/smoke-linux-portal-capture.mjs",
"smoke:linux-portal-record": "node scripts/smoke-linux-portal-record.mjs",
"smoke:portal-preview-proof": "node scripts/smoke-portal-preview-proof.mjs",
"smoke:remote-control": "node scripts/smoke-remote-control-app.mjs",
"smoke:remote-lan": "node scripts/smoke-remote-lan-app.mjs",
"smoke:record-latency": "node scripts/smoke-record-latency-app.mjs",
"smoke:record-latency:gate": "node scripts/smoke-record-latency-app.mjs --enforce",
"smoke:system-audio": "node scripts/smoke-system-audio-app.mjs",
"smoke:output-stall": "node scripts/smoke-output-stall-app.mjs",
"smoke:backend-single-instance": "node scripts/smoke-backend-single-instance.mjs",
"smoke:backend-resilience": "node scripts/smoke-backend-resilience.mjs",
"smoke:command-lanes": "node scripts/smoke-command-lanes.mjs",
"smoke:live-control-recycle": "node scripts/smoke-live-control-recycle.mjs",
"probe:ffmpeg-capture-clock": "node scripts/ffmpeg-capture-clock.mjs",
"smoke:live-source-switch": "node scripts/smoke-live-source-switch-app.mjs",
"smoke:youtube-quota": "node scripts/smoke-youtube-quota-app.mjs",
"smoke:captions-contract": "cargo build -p videorc-backend && node scripts/smoke-captions-contract.mjs",
"smoke:cohost-fake": "cargo build -p videorc-backend && node scripts/smoke-cohost-fake.mjs",
"smoke:session-markers": "cargo build -p videorc-backend && node scripts/smoke-session-markers.mjs",
"smoke:orcle-commands": "cargo build -p videorc-backend && node scripts/smoke-orcle-commands.mjs",
"smoke:captions-live": "node scripts/smoke-captions-live-app.mjs",
"smoke:captions-dual-orientation": "node scripts/smoke-captions-dual-orientation-app.mjs",
"captions:contact-sheet": "node scripts/caption-style-contact-sheet.mjs",
"smoke:repair-encoder": "node scripts/smoke-repair-encoder.mjs",
"smoke:noise-cleanup": "node scripts/smoke-noise-cleanup.mjs",
"smoke:noise-cleanup:bundled": "node scripts/smoke-noise-cleanup.mjs --require-bundled",
"smoke:clean-cut": "cargo build -p videorc-backend && node scripts/smoke-clean-cut-app.mjs",
"smoke:obs-import": "node scripts/smoke-obs-import.mjs",
"smoke:app-quit-recording": "node scripts/smoke-app-quit-recording-finalization.mjs",
"smoke:process-lifecycle": "node scripts/smoke-process-lifecycle.mjs",
"smoke:process-memory": "node scripts/smoke-process-memory.mjs --gate",
"smoke:process-memory:sentinel": "node scripts/run-with-env.mjs VIDEORC_PROCESS_MEMORY_WARMUP_MS=1000 VIDEORC_PROCESS_MEMORY_SAMPLE_MS=8000 VIDEORC_PROCESS_MEMORY_INTERVAL_MS=1000 -- node scripts/smoke-process-memory.mjs --gate",
"smoke:account-auth": "node scripts/smoke-account-auth.mjs",
"smoke:sources": "node scripts/smoke-source-reconciliation.mjs",
"smoke:session-ops": "node scripts/smoke-session-ops.mjs",
"smoke:performance-check": "node scripts/smoke-performance-check.mjs",
"smoke:performance-check:step-down": "node scripts/run-with-env.mjs VIDEORC_PERFORMANCE_CHECK_WIDTH=3840 VIDEORC_PERFORMANCE_CHECK_HEIGHT=2160 VIDEORC_PERFORMANCE_CHECK_FORCE_FAIL_ABOVE_HEIGHT=1080 VIDEORC_PERFORMANCE_CHECK_EXPECT_HEIGHT=1080 -- node scripts/smoke-performance-check.mjs",
"smoke:start-labels": "node scripts/smoke-start-labels.mjs",
"smoke:layout-source-loop": "node scripts/smoke-layout-source-loop-app.mjs",
"smoke:live-layout-switch-recording": "node scripts/smoke-live-layout-switch-recording-app.mjs",
"smoke:live-layout-switch-recording:devices": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_LIVE_LAYOUT_REAL_SCREEN=1 -- node scripts/smoke-live-layout-switch-recording-app.mjs",
"smoke:preview-real-launch": "node scripts/smoke-preview-real-launch-app.mjs",
"smoke:freeform-editor": "node scripts/smoke-freeform-editor-app.mjs",
"smoke:preview-scene-commit": "node scripts/smoke-preview-scene-commit-app.mjs",
"smoke:preview-pump-diagnostics": "node scripts/smoke-preview-pump-diagnostics-app.mjs",
"smoke:preview-click-focus": "node scripts/smoke-preview-click-focus-app.mjs",
"smoke:preview-interaction-stress": "node scripts/smoke-preview-interaction-stress-app.mjs",
"smoke:preview-interaction-stress:devices": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_PREVIEW_INTERACTION_DEVICE_SMOKE=1 -- node scripts/smoke-preview-interaction-stress-app.mjs",
"smoke:preview-motion": "node scripts/smoke-preview-motion-app.mjs",
"probe:preview-window": "node scripts/preview-window-probe.mjs",
"probe:comments-window": "node scripts/comments-window-probe.mjs",
"probe:ui-glass": "node scripts/ui-glass-probe.mjs",
"probe:preview-lifecycle": "node scripts/preview-lifecycle-probe.mjs --gate",
"probe:preview-lifecycle:linux": "node scripts/run-with-env.mjs --platform=linux VIDEORC_EXPECT_LINUX_PROOF=1 -- node scripts/preview-lifecycle-probe.mjs --gate",
"probe:split-flv": "node scripts/probe-split-flv-capture.mjs",
"probe:release-storage-compat": "node scripts/probe-release-storage-compat.mjs",
"probe:live-audio-controls": "node scripts/probe-live-audio-controls.mjs",
"smoke:preview-surface": "node scripts/smoke-preview-surface-app.mjs",
"smoke:preview-endurance": "node scripts/run-with-env.mjs VIDEORC_SMOKE_TIMEOUT_MS=720000 VIDEORC_PREVIEW_SURFACE_SAMPLE_MS=600000 -- node scripts/smoke-preview-surface-app.mjs",
"smoke:preview-performance": "node scripts/perf-idle-probe.mjs --gate",
"smoke:preview-performance:native": "node scripts/perf-idle-probe.mjs --gate",
"smoke:preview-performance:jpeg-fallback": "node scripts/smoke-preview-performance-app.mjs --gate",
"smoke:recording-performance": "node scripts/smoke-recording-performance-app.mjs --gate",
"smoke:scene-presets": "node scripts/smoke-scene-presets-app.mjs",
"smoke:recording-studio": "node scripts/smoke-recording-studio.mjs",
"smoke:scene-switch-pixels": "node scripts/smoke-scene-switch-pixels.mjs",
"smoke:recording-studio:devices": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_RECORDING_STUDIO_DEVICE_SMOKE=1 -- node scripts/smoke-recording-studio.mjs",
"smoke:screen-recording-real": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_BASELINE_RECORDING_MS=8000 VIDEORC_BASELINE_WARMUP_MS=2000 VIDEORC_BASELINE_PREVIEW_MEASUREMENT_MS=2000 VIDEORC_BASELINE_NO_CAMERA=1 VIDEORC_BASELINE_NO_MIC=1 VIDEORC_BASELINE_LAYOUT_PRESET=screen-only VIDEORC_BASELINE_SCREEN_MOTION_STIMULUS=1 -- node scripts/real-source-baseline-app.mjs --screen-recording-gate",
"smoke:notes-window-invisible": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_NOTES_WINDOW=1 VIDEORC_BASELINE_NOTES_OVERLAY=1 VIDEORC_BASELINE_RECORDING_MS=8000 VIDEORC_BASELINE_WARMUP_MS=2000 VIDEORC_BASELINE_PREVIEW_MEASUREMENT_MS=2000 VIDEORC_BASELINE_NO_CAMERA=1 VIDEORC_BASELINE_NO_MIC=1 VIDEORC_BASELINE_LAYOUT_PRESET=screen-only VIDEORC_BASELINE_SCREEN_MOTION_STIMULUS=1 -- node scripts/real-source-baseline-app.mjs --notes-overlay-gate",
"smoke:recording-native-preview": "node scripts/smoke-recording-native-preview-app.mjs",
"smoke:windows-native-screen": "node scripts/smoke-windows-native-screen-app.mjs",
"smoke:windows-main-window-recovery": "node scripts/smoke-windows-main-window-recovery.mjs",
"smoke:windows-texture-capture": "node scripts/run-with-env.mjs --platform=win32 VIDEORC_WINDOWS_GRAPHICS_CAPTURE=1 VIDEORC_WINDOWS_REQUIRE_GRAPHICS_CAPTURE=1 -- pnpm smoke:windows-native-screen",
"smoke:windows-encoded-bridge": "node scripts/smoke-windows-encoded-bridge.mjs",
"smoke:windows-stream-performance": "node scripts/smoke-windows-stream-performance.mjs",
"smoke:windows-obs-side-by-side": "node scripts/smoke-windows-obs-side-by-side.mjs",
"smoke:windows-d3d11-media": "node scripts/smoke-windows-d3d11-media.mjs",
"smoke:windows-live-audio-controls": "node scripts/smoke-windows-live-audio-controls-app.mjs",
"smoke:recording-native-preview:hidden": "node scripts/run-with-env.mjs VIDEORC_SMOKE_TIMEOUT_MS=180000 VIDEORC_NATIVE_PREVIEW_INCLUDE_HIDDEN=1 -- node scripts/smoke-recording-native-preview-app.mjs",
"smoke:recording-native-preview:endurance": "node scripts/run-with-env.mjs VIDEORC_SMOKE_TIMEOUT_MS=240000 VIDEORC_NATIVE_PREVIEW_RECORDING_MS=60000 VIDEORC_NATIVE_PREVIEW_WARMUP_MS=12000 VIDEORC_NATIVE_PREVIEW_INCLUDE_1440=1 VIDEORC_NATIVE_PREVIEW_LAYOUT_STRESS_UPDATES=12 -- node scripts/smoke-recording-native-preview-app.mjs",
"probe:recording-native-preview:videotoolbox": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_NATIVE_PREVIEW_SOURCE_COMPLETE_SCENE=1 VIDEORC_ENCODER_BRIDGE_VIDEOTOOLBOX_PROBE=1 VIDEORC_NATIVE_PREVIEW_REPORT_ONLY=1 VIDEORC_NATIVE_PREVIEW_RECORDING_MS=6000 VIDEORC_NATIVE_PREVIEW_WARMUP_MS=1500 VIDEORC_NATIVE_PREVIEW_MEASUREMENT_MS=2500 -- node scripts/smoke-recording-native-preview-app.mjs",
"probe:recording-native-preview:videotoolbox-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264 -- pnpm probe:recording-native-preview:videotoolbox",
"probe:recording-native-preview:videotoolbox-mpegts-output": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_ENCODER_BRIDGE_VIDEO_OUTPUT=videotoolbox-h264-mpegts -- pnpm probe:recording-native-preview:videotoolbox",
"smoke:encoder-bridge": "node scripts/smoke-encoder-bridge-app.mjs",
"smoke:streaming-secrets": "node scripts/smoke-streaming-secrets.mjs",
"smoke:platform-lifecycle": "node scripts/smoke-platform-lifecycle.mjs",
"smoke:provider-readiness": "node scripts/smoke-provider-readiness.mjs",
"smoke:provider-readiness:evidence": "node scripts/smoke-provider-readiness.mjs --markdown",
"smoke:provider-readiness:strict": "node scripts/run-with-env.mjs VIDEORC_SMOKE_REQUIRE_PROVIDER_READY=1 -- node scripts/smoke-provider-readiness.mjs",
"support-bundle:verify": "node scripts/verify-support-bundle.mjs",
"smoke:oauth-guards": "node scripts/smoke-oauth-guards-app.mjs",
"smoke:live-chat-fake-providers": "node scripts/smoke-live-chat-fake-providers.mjs",
"smoke:comment-highlight-stream": "node scripts/smoke-comment-highlight-stream-app.mjs",
"smoke:oauth": "node scripts/smoke-oauth-app.mjs",
"smoke:screens": "node scripts/smoke-screens-app.mjs",
"smoke:multistream": "node scripts/smoke-multistream-app.mjs",
"smoke:multistream:vertical": "node scripts/run-with-env.mjs VIDEORC_SMOKE_VERTICAL_LEG=fit -- node scripts/smoke-multistream-app.mjs",
"smoke:multistream:vertical-fill": "node scripts/run-with-env.mjs VIDEORC_SMOKE_VERTICAL_LEG=fill -- node scripts/smoke-multistream-app.mjs",
"smoke:multistream-endurance": "node scripts/smoke-multistream-endurance-app.mjs",
"smoke:packaged": "node scripts/smoke-packaged-app.mjs",
"smoke:packaged:bundled": "node scripts/smoke-packaged-app.mjs --require-bundled-ffmpeg",
"smoke:packaged:native-preview": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_SMOKE_PACKAGED_APP=1 VIDEORC_EXPECT_NATIVE_METAL_PREVIEW=1 -- node scripts/smoke-preview-surface-app.mjs",
"smoke:packaged:native-preview:performance": "node scripts/run-with-env.mjs --platform=darwin VIDEORC_PERF_REQUIRE_ACTIVE_BUDGET=1 VIDEORC_PERF_APP_EXECUTABLE=apps/desktop/release/mac-arm64/Videorc.app/Contents/MacOS/Videorc -- pnpm perf:scenario --scenario detached-native-preview --profile-class short-sentinel --gate --warmup-seconds 60 --measurement-seconds 120 --sample-interval-ms 1000 --output docs/acceptance/artifacts/performance/release/packaged-native-preview.json",
"smoke:packaged:release": "pnpm smoke:packaged:bundled && pnpm smoke:packaged:native-preview",
"smoke:local-gates:windows": "node scripts/smoke-local-gates-windows.mjs",
"smoke:local-gates": "pnpm check:text-files && pnpm typecheck && pnpm build && pnpm check:renderer-assets && cargo test -p videorc-backend && cargo clippy -p videorc-backend -- -D warnings && pnpm smoke:oauth && pnpm smoke:oauth-guards && pnpm smoke:sources && pnpm smoke:session-ops && pnpm smoke:start-labels && pnpm smoke:streaming-secrets && pnpm smoke:platform-lifecycle && pnpm smoke:screens && pnpm smoke:multistream && pnpm smoke:dev && pnpm smoke:record-latency:gate && pnpm smoke:system-audio && pnpm smoke:recording-matrix && pnpm smoke:remote-control && pnpm smoke:remote-lan && pnpm smoke:provider-readiness && pnpm smoke:live-chat-fake-providers && pnpm smoke:youtube-quota && pnpm smoke:orcle-commands && pnpm smoke:command-lanes && pnpm probe:comments-window && pnpm probe:ui-glass --gate --surfaces && pnpm smoke:live-control-recycle && pnpm smoke:backend-resilience && pnpm smoke:repair-encoder && pnpm smoke:process-memory:sentinel && pnpm smoke:session-decay:gate && pnpm smoke:capture-decay-soak:contract && pnpm smoke:capture-decay-soak:gate && pnpm smoke:capture-decay-soak:long-recording",
"backend:dev": "cargo run -p videorc-backend --bin videorc-backend",
"backend:test": "cargo test",
"backend:fmt": "cargo fmt --check",
"backend:clippy": "cargo clippy -- -D warnings",
"smoke:scheduled-streams": "node scripts/smoke-scheduled-streams-app.mjs",
"ffmpeg:build:capture:windows": "node scripts/build-ffmpeg-capture-windows.mjs",
"probe:ffmpeg-capture:windows": "node scripts/ffmpeg-capture-windows.mjs",
"release:start": "node scripts/release.mjs start",
"release:status": "node scripts/release.mjs status",
"release:watch": "node scripts/release.mjs watch",
"release:resume": "node scripts/release.mjs resume",
"release:cancel": "node scripts/release.mjs cancel",
"release:accept": "node scripts/release.mjs accept",
"release:retry-build": "node scripts/release.mjs retry-build",
"release:record": "node scripts/release.mjs record",
"release:build:macos": "node scripts/release-build-macos.mjs",
"release:verify:production": "node scripts/release-verify-production.mjs",
"release:announce": "node scripts/release-announce.mjs",
"release:provision": "node scripts/release-provision.mjs",
"release:rehearse": "node scripts/release-rehearse.mjs",
"release:sync:controlled": "gh workflow run release-sync-origins.yml --ref main",
"release:recover": "gh workflow run release-recover-publication.yml --ref main",
"smoke:windows-mf-probe": "node scripts/smoke-windows-mf-probe.mjs",
"probe:windows-openh264": "node scripts/probe-windows-openh264-comparison.mjs"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@neon/config": "^1.7.2",
"eslint": "^10.4.1",
"eslint-plugin-react-hooks": "^7.1.1",
"js-yaml": "4.3.0",
"prettier": "^3.8.4",
"typescript-eslint": "^8.61.0",
"ws": "^8.21.0"
}
}