watermarks-remover: 권한 있는 파일의 숨은 문자와 메타데이터 정리
본인이 권리를 가진 파일의 숨은 문자와 AI 생성 관련 메타데이터를 검사·정리하는 로컬 Python 도구와 에이전트 연동 기능이에요.
주요 기능
- 텍스트의 보이지 않는 Unicode·특수 공백 등을 검사·정규화하는 Layer A와, 여러 파일 형식의 C2PA·EXIF·XMP·문서 속성 정리 경로를 제공해요.
- 파일 검사·정리는 CLI와 별도 로컬 HTTP 서비스로 제공되고, remove-ai-marks 스킬은 이 서비스에 접속하는 얇은 클라이언트예요.
- 선택적 텍스트 재작성과 무거운 이미지·오디오·영상 처리 경로가 있으나 품질 변화와 검증 한계가 커요. 일반적인 사진 로고 지우개로 설명하면 부정확해요.
구조
service/scripts 아래의 Python 표준 라이브러리 중심 엔진이 파일 종류를 분류하고 텍스트·이미지·컨테이너·오디오/비디오 처리기로 보냅니다. clean_file.py 실제 코드는 알 수 없는 형식을 기본 거부하고 파일 크기를 제한하며, 별도 server.py가 HTTP API를 제공해요. Claude/Codex/Cursor 등의 스킬과 선택 후크는 엔진 사용을 돕는 연동 계층이에요.
누구에게 쓸모 있나요
자신의 원고·문서·이미지의 개인정보·숨은 문자·생성 도구 흔적을 검토하고, 원본을 보존하면서 파일을 관리하려는 기술 사용자에게 적합해요. 타인의 워터마크·저작권 고지·출처를 무단 제거하거나 사람의 저작물로 속이기 위한 용도로 안내하지 않습니다.
설치 전 준비
- 기본 스크립트·HTTP 서버는 Python 3.10+ 표준 라이브러리로 실행하는 경로가 문서화되어 있어요. 에이전트 스킬만 설치해도 파일 처리 서버가 자동 준비되는 것은 아니에요.
- PDF의 실제 구조 재작성에는 qpdf가 필요하다고 README가 설명하며, exiftool·c2patool·Ghostscript 등의 지원 여부에 따라 검사·정리 범위가 달라집니다.
- 텍스트 재작성에는 설정된 모델 백엔드가 필요할 수 있어요. 무거운 선택 기능은 GPU·모델 다운로드·외부 코드·추가 라이선스 조건을 수반해요.
- Python 3.10+ Windows·macOS·Linux 경로가 문서화됨
- Docker Compose의 loopback HTTP core 서비스
- Claude Code·Codex·Cursor·Cowork 연동은 호스트별 설치와 서비스 도달 가능성이 별도 필요
설치 방법
기본 로컬 서비스
권한 있는 자료의 사본을 준비하고 공식 저장소의 소스를 검토한 뒤 Python 3.10+ 환경에서 서비스를 시작하는 절차예요. Windows용 문서 예시는 아래와 같습니다. 이 조사에서는 실행하지 않았어요.
py service/scripts/server.py --host 127.0.0.1 --port 8765
Docker와 스킬은 선택
Compose는 core만 시작하는 방식과 harness/heavy 프로필을 분리해요. 기본 host 포트는 127.0.0.1:8765예요. 전체 remove-ai-marks 스킬을 쓰려면 서비스 접속이 필요하고, text-only인 clean-user-facing-text는 별도 구성이에요. 자동 변경 후크는 먼저 check 모드로 검토하는 편이 적절해요.
사용 방법
- 처리할 자료의 권리·계약·필수 출처 표기 조건부터 확인하고 원본을 별도로 보관해요. 공개용 사본만 대상으로 삼습니다.
- inspect_file.py로 형식과 발견 항목을 확인한 뒤, 필요한 최소 항목만 다른 출력 파일에 정리해요. 예: python3 service/scripts/inspect_file.py draft.md. 검사 결과가 없다는 사실은 모든 워터마크가 없음을 보증하지 않습니다.
- 문서·이미지에 텍스트 전용 도구를 강제로 사용하지 않습니다. clean_file.py의 형식별 경로와 출력 사본을 사용하고, 결과를 다시 열어 레이아웃·수식·그림·메타데이터를 대조해요.
- HTTP /clean의 text 경로는 현재 문서상 Layer B 재작성을 기본 요구하고 백엔드 미설정이면 400을 반환해요. 단순 숨은 문자 정리와 모델을 통한 문장 재작성을 혼동하지 않습니다.
- C2PA·저작자·생성 이력은 신뢰·검증에 필요한 정보일 수 있어요. 정리가 필요해도 원본과 변경 이력을 보존하고 외부 공개 때 필요한 출처 표시는 유지해요.
비용과 API 키
기본 로컬 Python 검사에는 외부 API 키가 필요하지 않습니다. 선택 재작성·원격 검출은 공급자 API 키·요금·자료 전송을 수반할 수 있고, 로컬 대형 모델은 저장공간·메모리·GPU 비용이 들어요. 서버 인증용 WATERMARKS_SERVER_API_KEY는 선택할 수 있으나 기본 Compose 환경값은 비어 있어 인증이 없어요.
라이선스
본 저장소 루트 LICENSE는 MIT(2026 Guillaume Meyer and contributors)예요. 그러나 compose.yaml은 CtrlRegen upstream noai-watermark에 LICENSE가 없어 권리가 유보되어 있고 reverse-SynthID는 비상업 연구 라이선스여서 해당 이미지를 공개 배포하지 않는다고 명시해요. 루트 MIT가 외부 코드·모델의 상업 이용이나 처리 대상 자료의 권리까지 허가하는 것은 아니에요.
주의사항과 알려진 이슈
- C2PA 같은 출처·진위 정보, EXIF·문서 속성을 지우면 검증·추적·저작자 표시가 사라집니다. 소프트웨어 사용 허가와 저작권 고지·출처 제거의 적법성·계약 준수는 구별해야 해요. 본인 소유 또는 명시적으로 허가받은 자료에서만 사용해요.
- 통계적 텍스트 표식·픽셀 표식은 공급자 검출기 없이 완전 제거를 입증할 수 없어요. 프로젝트 removal-matrix도 동일 설정의 연구 검증과 실제 공급자 검출을 구분해요.
- 재작성은 의미·어조를 바꾸고 이미지 재생성·오디오/영상 변환은 화질·음색·속도·재생시간을 손상할 수 있어요. SynthID 오디오/비디오와 C2PA soft binding 등은 문서상 범위 밖이에요.
- 로컬 서버 기본 인증이 없으므로 임의로 외부에 공개하지 않습니다. 원격 모델 백엔드를 선택하면 자료가 기기 밖으로 나갈 수 있어요.
- 열린 이슈에는 DOCX의 strip_all_metadata 동작이 일부 제목·작성자 속성을 남긴다는 신고와 배포 이미지 보안 패키지 갱신 요청이 있어요. 검사 결과를 전체 제거 보증으로 사용하면 안 돼요.
#420 DOCX 메타데이터 일부 잔류 보고
v0.7.0 이미지에서 strip_all_metadata를 줘도 dc:title 등이 남는다는 사용자 보고예요. 원본 전체를 재현하지 못했고 현재 소스에서의 재현 여부는 미확인이에요.
#419 v0.7.0 이미지 libbrotli1 갱신 요청
배포 이미지의 libbrotli1을 스캐너가 취약하다고 표시했다는 신고예요. 이미지 다운로드·취약점 재현·수정 상태 독립 확인은 하지 않았어요.
#421 서비스 미기동으로 스킬 실패
스킬만으로 처리되지 않고 별도 서비스가 필요하다는 현상을 보여주는 열린 보고예요.
확인 범위
확인 날짜: 2026-10-29
확인 커밋: 5c180932a00c793261177f79aee21db8929f3fe2
확인한 범위: README, LICENSE, compose.yaml, Makefile, clean_file.py, 상세 제거 범위 표와 v0.7.0 릴리스·공개 이슈를 정적으로 확인했어요. 설치 명령은 공식 문서에서 필요한 최소 예만 정리했어요.
확인 한계: 대상 프로그램·모델·이미지·의존성을 다운로드하거나 설치·실행하지 않았어요. 워터마크 제거·비탐지·형식 보존·법률 적합성을 보증하지 않으며 공급자별 실검증은 없어요.