r/linuxmemes의 농담을 실제 앱으로 만든 과정: Rust로 구현한 로컬 우선 미디어 라이브러리 JizzCraft
요약
r/linuxmemes의 농담을 모티브로 한 로컬 우선 미디어 라이브러리 앱 'JizzCraft'를 Rust와 Claude Code를 활용하여 개발했습니다. 이 앱은 오프라인 작동을 기본으로 하며, 사용자의 프라이버시 보호에 중점을 둡니다. 검색 가능한 인덱싱, 고급 비디오 플레이어, 신중 모드 등 다양한 기능을 갖추고 있습니다.
핵심 포인트
- Rust 기반의 네이티브 데스크톱 앱 구현
- 오프라인 작동을 기본으로 하는 강력한 프라이버시 설계
- Claude Code를 활용하여 수직 슬라이스 방식으로 개발 진행
- SQLite로 메타데이터 관리 및 선택적 암호화 기능 제공
이틀 전, r/linuxmemes에 누군가가 'Craft' 앱 스위트 패러디인 'JizzCraft'의 가짜 랜딩 페이지를 게시했습니다. 저는 이것이 실제로 존재한다면 더 재미있을 것 같아 Claude와 Claude Code를 사용해 직접 만들어 보았습니다. 이제 이것은 실제 애플리케이션이 되었고, 방금 v0.2.0 알파 버전을 출시했습니다.
JizzCraft는 사용자의 이미지 및 비디오 컬렉션(이름과 18+ 태그에서 알 수 있듯이 성인 콘텐츠)을 탐색하고, 정리하고, 재생하기 위한 네이티브 Rust 데스크톱 앱입니다. 폴더를 지정하면 라이브러리를 검색 가능한 썸네일 그리드로 인덱싱합니다. 현재는 전체 텍스트 검색, 즐겨찾기, 0~5점 별점, 태그, 카테고리, 플레이리스트, 필터, 저장된 보기, 보기 기록, 재생 재개, 비디오 마커, 그리고 새로 가져온 미디어를 검토할 수 있는 받은 편지함 기능이 포함되어 있습니다. 이미지 뷰어와 탐색(seeking), 볼륨 제어, 로컬 자막 등이 가능한 GStreamer 기반 비디오 플레이어도 제공됩니다.
프라이버시는 처음부터 핵심 설계 목표였습니다: 기본적으로 오프라인 작동 (Offline by default): 오프라인 에디션에는 네트워크 코드가 전혀 포함되어 있지 않습니다. 계정, 원격 측정(telemetry), 분석(analytics), 클라우드 동기화(cloud sync), 업데이트 확인 또는 광고가 없습니다. 사용자의 파일은 그대로 유지됩니다: JizzCraft는 미디어를 이동시키거나, 이름을 바꾸거나, 수정하지 않습니다. 라이브러리 메타데이터는 로컬 SQLite 데이터베이스에 저장됩니다.
신중 모드 (Discreet mode): 보스 키(Ctrl+Shift+H)를 누르면 재생이 일시 중지되고, 오디오가 음소거되며, 중립적인 모양의 창으로 전환되어 앱이 최소화됩니다. 신중 모드와 공유 안전 모드(share-safe mode)는 파일 이름과 썸네일을 흐리게 처리할 수도 있습니다.
선택적 암호화 라이브러리 (Optional encrypted library): 실험적인 선택형 금고(vault)를 통해 라이브러리 데이터베이스와 썸네일을 암호화할 수 있습니다. 이 기능은 사용자의 원본 미디어 파일은 암호화하지 않으며, 비밀번호가 유실되면 복구할 수 없습니다.
또한, 사용자 스스로 인덱서, 토렌트 및 스트리밍 소스를 구성하려는 사람들을 위한 별도의 실험적인 온라인 에디션(Online edition)도 있습니다. 이는 명시적인 선택형 빌드이며, 기본 오프라인 에디션은 네트워크 연결이 없는 상태로 유지됩니다.
Claude가 도움을 준 방식 (How Claude helped): 사양: 저는 원래의 밈을 적절한 기술 사양과 상세한 Claude Code 프롬프트로 변환하기 위해 Claude를 사용했습니다.
이 프로젝트는 아키텍처(Rust, egui/wgpu, GStreamer 및 SQLite), 인수 기준(acceptance criteria), 개인 정보 보호 보장 사항, 그리고 “특정 기능이 작동한다고 주장하지 않는 한 절대 그렇게 하지 않는다”와 같은 엄격한 규칙을 정의했습니다. 구현 과정: Claude Code가 핵심 라이브러리와 데이터베이스부터 데스크톱 UI, 썸네일, 이미지 뷰어, 비디오 플레이어, 정리 도구, 개인 정보 보호 기능 및 패키징에 이르기까지 수직 슬라이스(vertical slices) 방식으로 애플리케이션을 구축했습니다. 각 슬라이스는 커밋되기 전에 형식 지정(formatting), 린팅(linting), 테스트를 거쳤습니다. 테스트: 이 프로젝트는 현재 오프라인 보장 사항, 미디어 파일 무결성, 라이브러리 작업 및 재생 상태 기계(playback state machine)에 대한 자동화된 검사를 갖추고 있으며, 여기에 18개의 엔드투엔드 시나리오와 CI에서 명시적인 성능 예산이 추가되었습니다. 가장 어려웠던 부분: GStreamer의 appsink에서 비디오 프레임을 egui/wgpu로 효율적으로 가져오는 것이었습니다. 텍스처 처리(Texture handling), 프레임 스트라이드(frame stride), 시크 결합(seek coalescing)에는 특별한 주의가 필요했습니다. 또한 “부드러워 보인다”는 것에 의존하기보다는 성능을 측정하는 벤치마크를 추가했습니다. 고해상도 비디오 재생은 여전히 알려진 CPU 성능 한계를 가지고 있으므로, 이 부분에 대한 피드백이 특히 유용할 것입니다. 스크린샷: 저장소의 모든 스크린샷과 데모 프레임은 앱 자체에서 합성적이고 절차적으로 생성된 SFW 테스트 미디어를 사용하여 생성됩니다. 이 저장소에는 실제 성인 콘텐츠가 포함되어 있지 않습니다. 상태 및 사용 방법: JizzCraft v0.2.0은 여전히 알파 버전입니다. 실물 하드웨어에서 테스트된 플랫폼은 Linux만 있습니다. Windows와 macOS 빌드는 실험적이며 실제 장치에서 검증되지 않았습니다. 아직 거친 부분이 있고 알려진 한계가 있으므로, 백업을 유지하지 않은 상태로 대체 불가능한 데이터에 이 앱을 신뢰하지 마십시오. MIT / Apache-2.0 하의 무료 오픈 소스입니다. Linux에서는 단일 명령어로 설치할 수 있습니다: curl --proto '=https' --tlsv1.2 -fsSL \ https://github.com/kerstz/JizzCraft/releases/latest/download/install.sh | sh 이 설치 프로그램은 다운로드 무결성을 확인하고 누락된 종속성(dependencies)이 있으면 설명합니다.
README에는 소스 코드 빌드 방법, GStreamer 코덱 문제 해결 및 릴리스 아티팩트 검증에 대한 내용도 문서화되어 있습니다. 저장소: https://github.com/kerstz/JizzCraft Rust 아키텍처, GStreamer/wgpu 비디오 파이프라인, 개인 정보 보호 보장 또는 사용 환경에서 문제가 발생하는 모든 피드백은 환영합니다. 제출자: /u/CXM550B [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기