The short version: Lettrait turns a photo you choose into a
typographic artwork made of real letters. The photo, the words you engrave, the
rendering, and the exported files are all processed on your device —
your photos and your words are never uploaded to us or anyone else. The app shows no
ads and has no account. What does leave your device: anonymous usage statistics
(which screens and steps you reached — never your media or your text), crash
diagnostics when the app stops unexpectedly, and what Google Play and RevenueCat need
to run the optional paid exports.
1. Who we are
vargg (“we”, “us”) is the developer of the Lettrait Android app
(gg.var.lettrait). Contact:
admin@var.gg.
2. Your photos and your words stay on your device
When you pick a photo and type a phrase, Lettrait reads them locally to build the
letter grid, choose a glyph for every cell, and render the artwork. All of this runs on
your device. We do not upload, store, or transmit your photos, the text you type, or the
artworks you create. The app contains no code that could send them: it has no server of
ours to talk to.
Finished artworks are archived as recipes in the app’s own private storage
(Lettrait/library) so you can reopen and re-export them, and
export files are written to the app’s own private storage too. A file only reaches your
gallery, your cloud drive, or another app when you send it there through
Android’s share sheet. Export files older than 30 days are swept automatically.
3. What we do and don’t collect
We do not collect:
No account or login — we don’t ask for your name, email, or phone number to use
the app.
No advertising, and no advertising identifier — Lettrait removes the Android
Advertising ID (AD_ID) permission from the app, so no ad ID is collected, and
analytics data is not used to personalize ads.
No access to your contacts, microphone, or camera, and no location permission — we
never request or read your device’s GPS or network location.
No photo library scanning — we only ever see the single image you pick.
We do collect anonymous usage analytics, through
Google Analytics for Firebase, so we can see which parts of the app
work and where people get stuck. It records a fixed list of product events — a photo was
imported, a wizard step was viewed or stepped back from, a render started / succeeded /
failed, the export sheet was opened, an export finished or failed, the paywall was
opened, a purchase succeeded or was cancelled — each with a few technical attributes:
the style preset, the canvas size, a cell-size band, a coarse cell-count band, how many
letter packs and phrases were in play, a coarse duration bucket (under 1s, 1–3s, …), a
zoom band, the export format, and an error category when something fails.
These events never contain your photo, any pixel of it, file names,
file paths, gallery locations, EXIF metadata, or any character of the phrase you typed.
This is a property of the code, not a promise about it: an analytics parameter may only
hold a true/false flag, a number, or one constant from a fixed list, so there is no type
a file name or a phrase could be carried in. Where an artwork has to be identified
across events, the app sends the first 12 characters of a one-way hash instead of the
artwork’s name.
Firebase assigns a randomly generated app-instance ID to your
installation. It is not your Google account, not an advertising ID, and not a hardware
serial; it resets if you clear the app’s data or reinstall. Google also derives an
approximate location (country / region level) from the IP address the
events arrive on, and receives the Google Play install referrer — which store link or
campaign led to the install. Alongside the events, three low-detail properties describe
the installation: whether it is on the free tier, a One credit, or Pro; the app’s active
language; and how many letter packs are in use, as a band (1, 2, 3, 4+).
Google acts as our data processor for analytics; see Google’s privacy
policy for how it handles this data. We keep analytics event data for at most 14 months.
Debug builds used during development send nothing to Firebase — those events are printed
to a local console only. To ask us to stop processing your usage analytics, email the
address in section 11.
4. Purchase log kept on your device
The app writes its own purchase-related steps (paywall opened, plan selected,
purchase succeeded, cancelled, or failed) to a small log file inside the app’s private
storage. It exists so a billing or refund question can be answered from what the app
actually believed, and it is capped at a quarter of a megabyte with the oldest entries
dropped. This file is never uploaded — it is removed when you uninstall
the app or clear its data.
5. Crash reports
When the app stops unexpectedly, Firebase Crashlytics sends us a
technical report so the fault can be found and fixed. A report contains the error type
and message, the stack trace (which functions were running), the device model, Android
version, available memory and storage, the app version, and a Crashlytics installation
identifier. We see these reports through Firebase and Google Play Console.
Crash reports are not designed to carry your content, and we do not use them to
collect it: your photo, your artwork, and your phrase are not attached to a report.
Before a report is sent, the app rewrites the error message inside it: anything shaped
like a file path, a file name, or a content URI is replaced with a placeholder. What
reaches us is the kind of failure and its cause — “could not open a file; no such file
or directory” — and not the location it happened at. As with the analytics rule above,
this is a property of the code rather than a promise about it. The one case it cannot
cover is a crash inside an Android system component, which the system reports in its own
words before the app is involved. We do not read crash reports for any purpose other
than diagnosing the fault, and they are never used for advertising or profiling.
Crash collection is switched off in development (debug) builds, so a
developer’s own crashes never enter the production reports. Crashlytics is provided by
Google, acting as our data processor.
6. Purchase and subscription information
Lettrait is free to create with. Print- and edit-ready exports are unlocked by an
optional one-off purchase (Lettrait One) or a subscription
(Lettrait Pro). Payments are processed by Google Play
Billing (Google is the seller of record), and entitlement status is managed
through RevenueCat, which validates purchases and tracks whether you
hold One or Pro. To do this, RevenueCat receives an app-generated anonymous identifier
and purchase/transaction details (such as the product purchased, purchase and renewal
dates, and basic device/platform information). We do not receive your card number or
payment credentials — those are handled entirely by Google Play. If you never purchase,
none of this applies.
RevenueCat acts as our data processor for purchase management. See
RevenueCat’s privacy policy (revenuecat.com/privacy) and Google Play’s privacy policy
for how they handle this data.
7. Device permissions
Picking a photo — handled by Android’s system photo picker or
file picker, which grants access only to the single image you choose. Lettrait
requests no broad photo, media, or storage permission.
Network access — used only by the billing/subscription SDKs
(Google Play Billing and RevenueCat) and by the Firebase SDKs described in sections 3
and 5. Lettrait never uses the internet to handle your images or your text.
8. Children
Lettrait is a general-audience app and is not directed to children under 13 (or the
equivalent minimum age in your country). We do not knowingly collect personal
information from children.
9. Data retention & deletion
Your artworks, their recipes, and the export files live in the app’s private storage
until you delete them; deleting an artwork in the library, clearing the app’s storage in
Android settings, or uninstalling the app removes them, and export files older than 30
days are swept automatically. Anything you have already shared out to your gallery or
another app stays there until you delete it. Analytics event data is kept for at most 14
months. To delete purchase records held by RevenueCat/Google, or for any privacy
request, email us at the address below.
10. Your rights
Depending on where you live (e.g., under GDPR or Korea’s PIPA), you may have the
right to access, correct, or delete your data and to withdraw consent. To exercise these
rights, contact us. This policy is governed by the laws of the Republic of Korea,
without prejudice to mandatory consumer protections in your country of residence.
11. Changes to this policy
We may update this policy as the app changes. We will update the “Effective” date
above and, for material changes, surface a notice in the app or store listing.
요약: Lettrait(레트레)는 사용자가 고른 사진을 진짜 글자로 이루어진
타이포그래피 작품으로 바꿉니다. 사진, 새겨 넣는 문구, 렌더링, 수출 파일은 모두
사용자 기기 안에서 처리되며 — 사진과 문구가 당사 또는 제3자에게
업로드되지 않습니다. 광고가 없고 계정도 없습니다. 기기를 떠나는 정보는 익명 이용
통계(어떤 화면·단계까지 진행했는지이며 미디어나 입력한 문자는 포함되지 않습니다),
앱이 비정상 종료됐을 때의 진단 정보, 그리고 선택적 유료 수출을 운영하기 위해
Google Play·RevenueCat이 필요로 하는 데이터입니다.
사진을 고르고 문구를 입력하면 Lettrait는 기기 안에서 그것을 읽어 글자 격자를 만들고,
셀마다 톤이 맞는 글자를 고르고, 작품을 렌더링합니다. 이 모든 과정은 기기에서 실행됩니다.
당사는 사용자의 사진, 입력한 문구, 생성한 작품을 업로드·저장·전송하지 않습니다. 앱에는
그것을 보낼 수 있는 코드 자체가 없습니다 — 통신할 당사 서버가 존재하지 않습니다.
완성된 작품은 다시 열고 재수출할 수 있도록 앱 전용 저장 공간(
Lettrait/library)에 레시피로 보관되며, 수출 파일 역시 앱 전용 저장 공간에
쓰입니다. 파일이 갤러리·클라우드·다른 앱으로 가는 것은 사용자가 안드로이드
공유 시트로 직접 보낼 때뿐입니다. 30일이 지난 수출 파일은 자동으로 정리됩니다.
3. 수집하는 정보와 수집하지 않는 정보
수집하지 않는 정보:
계정·로그인 없음 — 앱 사용을 위해 이름·이메일·전화번호를 요구하지 않습니다.
광고 없음, 광고 식별자 없음 — Lettrait는 안드로이드 광고 ID(AD_ID) 권한을 앱에서
제거하므로 광고 ID를 수집하지 않으며, 통계 데이터를 광고 개인화에 사용하지
않습니다.
연락처·마이크·카메라에 접근하지 않으며 위치 권한도 요청하지 않습니다 — 기기의
GPS나 네트워크 위치를 읽지 않습니다.
사진첩을 스캔하지 않습니다 — 직접 고른 이미지 한 장만 앱에 전달됩니다.
익명 이용 통계는 수집합니다. 앱의 어느 부분이 잘 동작하고 어디에서
막히는지 파악하기 위해 Google 애널리틱스 for Firebase를 사용합니다.
사전에 고정된 목록의 제품 이벤트 — 사진 가져오기, 마법사 단계 진입·뒤로가기, 렌더 시작·
성공·실패, 수출 시트 열림, 수출 완료·실패, 페이월 열림, 구매 성공·취소 등 — 과 소수의
기술 속성(스타일 프리셋, 캔버스 크기, 셀 크기 구간, 대략적인 셀 개수 구간, 사용한 글자
팩·문구 개수, 대략적인 소요 시간 구간(1초 미만, 1~3초 …), 확대 배율 구간, 수출 형식,
실패 시 오류 분류)을 기록합니다.
이 이벤트에는 사용자의 사진, 사진의 어떤 픽셀도, 파일 이름, 파일 경로, 갤러리 위치,
EXIF 메타데이터, 입력한 문구의 어떤 글자도 일절 포함되지 않습니다.
이는 약속이 아니라 코드의 성질입니다. 통계 파라미터에는 참/거짓 값, 숫자, 또는 고정된
목록에 있는 상수만 담길 수 있어서, 파일 이름이나 문구가 실릴 수 있는 타입 자체가
없습니다. 여러 이벤트에 걸쳐 같은 작품을 식별해야 할 때는 작품 이름 대신 단방향 해시의
앞 12자리를 전송합니다.
Firebase는 설치본마다 무작위로 생성된 앱 인스턴스 ID를 부여합니다.
이는 Google 계정도, 광고 ID도, 하드웨어 일련번호도 아니며, 앱 데이터를 삭제하거나
재설치하면 초기화됩니다. 또한 Google은 이벤트가 도달한 IP 주소로부터 대략적인
위치(국가·지역 수준)를 추정하고, Google Play 설치 리퍼러(어떤 스토어 링크나
캠페인을 통해 설치됐는지)를 수신합니다. 이벤트와 함께, 설치본을 설명하는 저해상도 속성
3가지가 기록됩니다: 무료·One·Pro 중 어느 상태인지, 앱의 활성 언어, 사용 중인 글자 팩
개수 구간(1, 2, 3, 4+).
Google은 통계 처리를 위한 수탁자(처리자)입니다. 처리 방식은 Google
개인정보처리방침을 참고하세요. 통계 이벤트 데이터는 최대 14개월간 보관합니다. 개발 중
사용하는 디버그 빌드는 Firebase로 아무것도 전송하지 않으며, 해당 이벤트는 로컬 콘솔에만
출력됩니다. 이용 통계 처리 중단을 원하시면 11항의 이메일로 요청해 주세요.
4. 기기에 남는 구매 기록
앱은 결제와 관련된 자체 진행 단계(페이월 열림, 플랜 선택, 구매 성공·취소·실패)를 앱
전용 저장 공간의 작은 로그 파일에 기록합니다. 결제·환불 문의가 있을 때 앱이 실제로 무엇을
인식했는지로 답하기 위한 것이며, 크기는 0.25MB로 제한되고 오래된 기록부터 삭제됩니다.
이 파일은 전송되지 않으며, 앱을 삭제하거나 앱 데이터를 지우면 함께
사라집니다.
5. 비정상 종료(크래시) 보고
앱이 예기치 않게 종료되면 Firebase Crashlytics가 원인을 찾아 고칠 수
있도록 기술 보고서를 전송합니다. 보고서에는 오류 유형과 메시지, 스택 트레이스(어떤 함수가
실행 중이었는지), 기기 모델, 안드로이드 버전, 가용 메모리·저장 공간, 앱 버전, Crashlytics
설치 식별자가 담깁니다. 당사는 이 보고서를 Firebase와 Google Play Console에서
확인합니다.
크래시 보고서는 사용자의 콘텐츠를 담기 위한 것이 아니며, 콘텐츠 수집에 사용하지도
않습니다. 사진·작품·문구는 보고서에 첨부되지 않습니다. 또한 앱은 보고서를 보내기 전에
그 안의 오류 메시지를 다시 씁니다. 파일 경로·파일 이름·콘텐츠 URI처럼 보이는 부분은
모두 자리표시자로 대체되며, 당사에 도착하는 것은 “파일을 열 수 없음, 해당 파일 없음”
같은 실패의 종류와 원인일 뿐 그 일이 일어난 위치가 아닙니다. 위의 통계 규칙과 마찬가지로
이것은 약속이 아니라 코드의 성질입니다. 한 가지 미치지 못하는 경우는 앱이 관여하기 전에
안드로이드 시스템 구성요소 안에서 발생한 종료로, 이때는 시스템이 자신의 문장으로
보고합니다. 당사는 결함 진단 외의 목적으로 크래시 보고서를 열람하지 않으며, 광고나
프로파일링에 사용하지 않습니다.
크래시 수집은 개발용 디버그 빌드에서 비활성화되어 있어, 개발자 본인의
크래시가 운영 보고서에 섞이지 않습니다. Crashlytics는 Google이 제공하며, 당사의
수탁자(처리자)로서 처리합니다.
6. 구매·구독 정보
Lettrait로 작품을 만드는 것은 무료입니다. 인쇄·편집용 수출은 선택적 1회 구매
(Lettrait One) 또는 구독(Lettrait Pro)으로 해제됩니다.
결제는 Google Play 결제가 처리하며(판매자는 Google), 이용 권한 상태는
RevenueCat이 관리해 구매를 검증하고 One·Pro 보유 여부를 추적합니다.
이를 위해 RevenueCat은 앱이 생성한 익명 식별자와 구매/거래 정보(구매한 상품, 구매 및 갱신
일자, 기본 기기/플랫폼 정보 등)를 받습니다. 당사는 카드번호나 결제 수단 정보를 받지 않으며
이는 전적으로 Google Play가 처리합니다. 구매하지 않으면 위 내용은 적용되지 않습니다.
RevenueCat은 구매 관리를 위한 수탁자(처리자)입니다. 처리 방식은
RevenueCat 개인정보처리방침(revenuecat.com/privacy)과 Google Play 개인정보처리방침을
참고하세요.
7. 기기 권한
사진 선택 — 안드로이드 시스템 사진 선택기 또는 파일 선택기를 통해
처리되며, 직접 고른 이미지 한 장에만 접근 권한이 부여됩니다. Lettrait는 사진·미디어
또는 저장소에 대한 광범위한 권한을 요청하지 않습니다.
네트워크 접근 — 결제/구독 SDK(Google Play 결제, RevenueCat)와
3항·5항에서 설명한 Firebase SDK만 사용합니다. Lettrait는 사진이나 문구를 처리하기 위해
인터넷을 사용하지 않습니다.
8. 아동
Lettrait는 일반 이용자 대상 앱으로, 만 14세 미만(또는 거주 국가의 최소 연령) 아동을
대상으로 하지 않으며 아동의 개인정보를 고의로 수집하지 않습니다.
9. 보관 및 삭제
작품과 레시피, 수출 파일은 사용자가 삭제할 때까지 앱 전용 저장 공간에 남습니다.
보관함에서 작품을 삭제하거나, 안드로이드 설정에서 앱 저장 공간을 지우거나, 앱을 삭제하면
함께 제거되며, 30일이 지난 수출 파일은 자동으로 정리됩니다. 이미 갤러리나 다른 앱으로
내보낸 파일은 사용자가 삭제할 때까지 그곳에 남습니다. 통계 이벤트 데이터는 최대 14개월간
보관합니다. RevenueCat/Google이 보관하는 구매 기록의 삭제나 기타 개인정보 요청은 아래
이메일로 연락해 주세요.
10. 이용자의 권리
거주 지역(예: GDPR, 대한민국 개인정보보호법)에 따라 열람·정정·삭제 및 동의 철회를
요청할 수 있습니다. 권리 행사는 아래 연락처로 요청하세요. 본 방침은 대한민국 법률을 따르되,
거주 국가의 강행적 소비자 보호 규정을 침해하지 않습니다.
11. 방침 변경
앱 변경에 따라 본 방침을 갱신할 수 있습니다. 변경 시 위 “시행일”을 갱신하며, 중요한
변경은 앱 또는 스토어 등재 정보에 고지합니다.
Firebase はインストールごとにランダム生成されたアプリインスタンス ID
を割り当てます。これは Google アカウントでも広告 ID でもハードウェアのシリアル番号でも
なく、アプリのデータを消去するか再インストールするとリセットされます。また Google は、
イベントの送信元 IP アドレスからおおよその位置(国・地域レベル)を推定し、
Google Play のインストールリファラー(どのストアリンクやキャンペーン経由でインストール
されたか)を受け取ります。イベントと併せて、インストールを説明する粒度の粗い 3 つの属性
が記録されます:無料・One・Pro のいずれの状態か、アプリの表示言語、使用中の文字パック数
の区分(1、2、3、4+)。
Google は統計処理における当社の処理者です。取り扱いについては Google の
プライバシーポリシーをご確認ください。統計イベントデータの保持期間は最長 14 か月です。
開発中に使用するデバッグビルドは Firebase へ何も送信せず、イベントはローカルのコンソール
に出力されるだけです。利用統計の処理停止をご希望の場合は、第 11 項のメールアドレスまで
ご連絡ください。
クラッシュの収集は開発用のデバッグビルドでは無効になっており、開発者
自身のクラッシュが本番のレポートに混ざることはありません。Crashlytics は Google が提供し、
当社の処理者として取り扱います。
6. 購入・サブスクリプション情報
Lettrait で作品を作ること自体は無料です。印刷・編集向けの書き出しは、任意の買い切り
(Lettrait One)またはサブスクリプション(Lettrait Pro)
で解放されます。決済は Google Play 課金が処理し(販売者は Google)、
利用権の状態は RevenueCat が管理して購入を検証し、One / Pro の保有状況を
追跡します。このために RevenueCat は、アプリが生成した匿名識別子と購入/取引情報(購入
商品、購入・更新日、基本的な端末/プラットフォーム情報など)を受け取ります。当社がカード
番号や決済情報を受け取ることはなく、これらはすべて Google Play が処理します。購入されない
場合、本項は適用されません。
RevenueCat は購入管理のための処理者(受託者)です。取り扱いについては
RevenueCat のプライバシーポリシー(revenuecat.com/privacy)および Google Play の
プライバシーポリシーをご確認ください。