Opal이 title_top 같은 값에 따옴표를 이스케이프 없이 뱉으면 파서의 Jackson readTree가 던져서 status=FAILED, clips=0이 된다. 같은 JSON이 캡컷 구간 JSON 붙여넣기로도 들어가므로 저장과 영상 생성이 둘 다 막힌다. 저장 전에 파싱을 시도하고, 깨졌으면 fix-opal-json.ps1로 문자열 값 안쪽 따옴표만 이스케이프한 뒤 재검증한다. 그래도 안 되면 저장하지 않고 PENDING으로 남긴다. 정상 JSON에는 아무 변화가 없다. 캡컷 방식 선택도 모드별로 갈랐다 - 1단계는 구간 JSON(wpaste), 풀버전은 오팔 JSON(paste). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
26 lines
1.1 KiB
PowerShell
26 lines
1.1 KiB
PowerShell
# Opal 출력 JSON 보정 — 문자열 값 안의 미이스케이프 따옴표를 \" 로 바꾼다.
|
|
#
|
|
# Opal이 title_top 같은 값에 따옴표를 그대로 뱉는 일이 있다(예: "title_top": ""나 진짜 방장하기 싫어...""").
|
|
# 그대로 저장하면 ShortformOutputParser의 Jackson readTree가 던져서 status=FAILED, clips=0이 되고,
|
|
# 캡컷 에이전트의 구간 JSON 붙여넣기도 같이 막힌다.
|
|
#
|
|
# 한 줄에 필드 하나씩 나오는 Opal 출력 형태를 전제로, `"key": "value"` 꼴 줄의
|
|
# value 안쪽 따옴표만 이스케이프한다. 이미 정상인 JSON에는 아무 변화가 없다.
|
|
#
|
|
# 사용:
|
|
# $fixed = & .\fix-opal-json.ps1 -Text $raw
|
|
param([Parameter(Mandatory = $true)][AllowEmptyString()][string]$Text)
|
|
|
|
$lines = $Text -split "`r`n|`n|`r"
|
|
$out = foreach ($ln in $lines) {
|
|
if ($ln -match '^(\s*"[A-Za-z0-9_]+"\s*:\s*)"(.*)"(\s*,?)\s*$') {
|
|
$pre = $Matches[1]; $val = $Matches[2]; $tail = $Matches[3]
|
|
$val = [regex]::Replace($val, '(?<!\\)"', '\"')
|
|
$pre + '"' + $val + '"' + $tail
|
|
}
|
|
else {
|
|
$ln
|
|
}
|
|
}
|
|
$out -join "`r`n"
|