목표
9월 파일럿(scratchpad/bank)에서 검증한 다축 서술 — CLIP 임베딩, 색 통계, 레이아웃, YOLO-World 오픈보캐 검출, 다국어 텍스트 임베딩, (추가) OCR — 을 CLI 가 로컬에서 돌려 서버에 올린다. free/pro 의 유일한 경로이고 business 서버 워커의 참조 구현.
동작
cloudbtl enrich <prop_id...> --enricher clip,color,layout,yolo-world [--pages 1-20] [--force]
cloudbtl enrich --batch <ingestBatch> --enricher clip # 배치 단위
cloudbtl enricher ls | install <name> | doctor
- 입력:
render 캐시의 페이지 PNG(없으면 자동 render) + 서버/로컬 text.page.
- 플러그인 프로토콜: CLI 가 외부 워커 프로세스를 띄우고 stdin 으로
{ documentId, pages:[{page, imagePath, text}] } JSON-lines, stdout 으로 descriptor item JSON-lines { kind, page, payload } 를 받는다. 워커 언어 무관(참조 워커는 Python).
- 참조 워커 패키지(별도 디렉터리
enrichers/python/): clip (open_clip ViT-B-32 → clip.embedding {model, dim, v}), color (→ color.stats), layout (char/img 비율 → layout.stats), yolo-world (도메인 어휘 파일 지정 → objects.yolo-world {boxes:[{label,score,bbox}], vocab}), text-embed (다국어 → embedding.text), ocr (→ text.ocr, hasTextLayer=false 인 PDF 에만 기본 실행).
- 각 enricher 는 매니페스트(
producer, version, kinds, requires)를 선언하고, 결과는 enricher 별 producer 로 올린다(예: cloudbtl-cli/clip), producerVersion = 워커 버전.
--force 없으면 descriptors/summary 에 같은 (producer, producerVersion) 이 있으면 건너뜀(재파생은 버전 올려서).
- 실패는
POST …/jobs 로 보고.
완료 기준
enrich prop_x --enricher clip,color 후 descriptors 에 페이지마다 clip.embedding, color.stats 가 보인다.
- 워커가 없는 머신에서는
enricher doctor 가 무엇을 설치해야 하는지 알려준다.
- 참조 워커의 결과가 9월 파일럿 갤러리(verify.html)와 같은 질의에서 같은 상위 결과를 낸다(회귀 픽스처 3개).
참고: 파일럿 코드 = 세션 스크래치(/private/tmp/claude-501/…/scratchpad/bank/), 레포로 옮겨와야 함. 클라이언트 실자료·PII 는 픽스처에 넣지 않는다.
목표
9월 파일럿(
scratchpad/bank)에서 검증한 다축 서술 — CLIP 임베딩, 색 통계, 레이아웃, YOLO-World 오픈보캐 검출, 다국어 텍스트 임베딩, (추가) OCR — 을 CLI 가 로컬에서 돌려 서버에 올린다. free/pro 의 유일한 경로이고 business 서버 워커의 참조 구현.동작
render캐시의 페이지 PNG(없으면 자동 render) + 서버/로컬text.page.{ documentId, pages:[{page, imagePath, text}] }JSON-lines, stdout 으로 descriptor item JSON-lines{ kind, page, payload }를 받는다. 워커 언어 무관(참조 워커는 Python).enrichers/python/):clip(open_clip ViT-B-32 →clip.embedding{model, dim, v}),color(→color.stats),layout(char/img 비율 →layout.stats),yolo-world(도메인 어휘 파일 지정 →objects.yolo-world{boxes:[{label,score,bbox}], vocab}),text-embed(다국어 →embedding.text),ocr(→text.ocr, hasTextLayer=false 인 PDF 에만 기본 실행).producer,version,kinds,requires)를 선언하고, 결과는 enricher 별 producer 로 올린다(예:cloudbtl-cli/clip), producerVersion = 워커 버전.--force없으면descriptors/summary에 같은 (producer, producerVersion) 이 있으면 건너뜀(재파생은 버전 올려서).POST …/jobs로 보고.완료 기준
enrich prop_x --enricher clip,color후descriptors에 페이지마다clip.embedding,color.stats가 보인다.enricher doctor가 무엇을 설치해야 하는지 알려준다.참고: 파일럿 코드 = 세션 스크래치(
/private/tmp/claude-501/…/scratchpad/bank/), 레포로 옮겨와야 함. 클라이언트 실자료·PII 는 픽스처에 넣지 않는다.