← back to services

live · service · iOS 출시 / Android 비공개 테스트 중

비즈픽셀

사진 한 장이 펄러비즈 도안이 되는 앱. 사진을 넣거나, 기존 도안을 스캔하거나, 직접 그려서 도안을 만들고 — 실제 비즈 브랜드 색과 기호, 필요한 개수까지 그대로 뽑아 줍니다. 다 만든 도안은 게시판에 공유하고, 남의 도안을 받아 그대로 만들 수도 있습니다.

SwiftUI Jetpack Compose Kotlin Vision Express TypeScript PostgreSQL

서비스 소개

펄러비즈(다리미 비즈)는 도안이 반입니다. 만들고 싶은 그림이 있어도 그걸 비즈 격자로 옮기는 일이 늘 숙제였고, 시중의 변환 도구는 대체로 그림을 픽셀로 줄여주는 데서 끝납니다. 정작 필요한 건 "이 색이 어느 브랜드 몇 번인지", "이 색 비즈가 몇 개 필요한지", "지금 몇 번째 줄을 놓고 있는지" 같은 것들인데요.

비즈픽셀은 사진을 고르고 비즈 폭만 정하면, 실제 펄러 · 하마 · 아트칼 팔레트의 가장 가까운 색으로 도안을 만들고 색별 기호와 행·열 번호, 색깔별 비즈 개수까지 함께 냅니다. 만드는 방법은 세 가지 — 사진은 자르기·회전·배경 지우기를 거쳐 변환하고, 기존 도안은 이미 픽셀화된 이미지의 격자를 자동으로 찾아 셀 중심 색만 정확히 읽어오며(격자선이 비즈 색에 섞이지 않게), 직접 그리기는 펜·도형·페인트통이 있는 캔버스에서 그려 바로 도안으로 바꿉니다.

여기에 게시판을 붙였습니다. 내가 만든 도안을 올리고, 남의 도안을 내 앱으로 받아 그대로 만들 수 있습니다. 업로드와 다운로드는 이미지가 아니라 도안 데이터 자체로 오가기 때문에, 받은 도안은 재감지 없이 원본 그대로 열립니다.

도안을 만드는 연산은 전부 기기 안에서 끝납니다. 서버는 게시판(계정 · 공유 · 검수 · 신고)만 담당하며, 기존 자체 호스팅 백엔드를 공유하되 데이터는 완전히 분리해서 씁니다.

Architecture

도안 변환은 전부 기기 안(온디바이스)에서 끝나고, 서버는 게시판만 맡습니다. 기존 서비스와 같은 VPS·같은 서버를 공유하되, 테이블·인증·API 경로를 pp_ 로 격리했습니다.

/ client 비즈픽셀 앱 (iOS / Android) SwiftUI · Jetpack Compose 온디바이스 도안 엔진 Vision 마스크 · 격자 감지 · 팔레트 매칭 · 코덱 https · 도안 데이터(compact binary) · duo.jiny.shop / edge Nginx · reverse proxy TLS · 약관/정책(/pp) · 공유 링크 웹 폴백 / app Express + TypeScript · /api/perlerpixel JWT(aud=perlerpixel) · 소셜 검증 · 검수 큐 · 계급 · 신고/차단 · 관리자 / data & ext PostgreSQL pp_* 격리 · 도안 / 신고 / 계급 퍼시스턴트 볼륨 프리뷰 이미지 · 워터마크 FCM · OAuth 다국어 푸시 · Apple · Google · Kakao shared VPS · Docker

Behind the scenes

만들면서 가장 오래 붙든 두 가지 — 격자선이 비즈 색을 오염시키는 문제, 그리고 저작권 리스크를 운영으로 감당하는 구조.

  1. 01

    이미 도안인 이미지를 다시 도안으로 읽기

    사진 변환보다 훨씬 까다로웠던 건 이미 픽셀화된 도안 이미지를 스캔하는 쪽이었습니다. 셀 하나를 통째로 평균 내면 검은 격자선이 섞여 들어가 회색 비즈가 되어버리고, 안티에일리어싱된 외곽선은 색을 한 단계씩 밀어냅니다. 그래서 격자를 먼저 감지해 셀 경계를 정렬하고, 각 셀에서 중심부의 최빈색(mode)만 뽑도록 바꿨습니다. 여백 없는 도안은 바깥 테두리가 잘려나가서 격자를 콘텐츠 끝까지 확장하는 처리를 따로 넣었고, 기호 도안·격자선 있는 도안까지 실제 샘플로 테스트하며 다듬었습니다.

    반대 방향도 필요했습니다. 앱에서 내보낸 도안은 이미지 안에 도안 데이터를 그대로 임베드(메타데이터 + QR 폴백)해서, 다시 불러올 때 감지 과정을 거치지 않고 원본 도안으로 복원됩니다. 게시판의 업로드·다운로드도 이 코덱을 그대로 재사용합니다.

  2. 02

    UGC의 진짜 비용은 저작권이다

    도안 공유 게시판을 만든다는 건, 사람들이 좋아하는 캐릭터를 올릴 것이라는 뜻입니다. 그래서 커뮤니티는 기능보다 정책을 먼저 설계했습니다. 오리지널만 허용하는 규칙과 업로드 시 권리 확인, 신고하면 신고한 사람에게는 그 즉시 안 보이게 하고, 차단·금지어 필터·관리자 큐·24시간 조치를 출시 전에 갖췄습니다.

    처음엔 "올리면 바로 게시, 신고로 걸러내는" 사후 검수로 잡았는데, 운영 부담을 계산해보니 감당이 안 되겠더군요. 결국 신뢰도 게이팅으로 바꿨습니다 — 상위 계급 창작자의 공개 도안만 즉시 게시되고, 그 아래는 승인 큐로 갑니다. 링크로만 공유하는 비공개 도안은 계급과 무관하게 바로 활성화되고요. 신고·문의·승인 요청이 들어오면 관리자에게 푸시가 가고, 앱 안에서 바로 처리할 수 있게 만들었습니다.

Screenshots

카드를 누르면 큰 이미지로 볼 수 있습니다.

More

지나온 버전과 앞으로 들어갈 항목을 별도 페이지에서 확인할 수 있습니다.