{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "en",
  "slug": "zenconverter",
  "url": "https://tesign.com/en/item/zenconverter/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/zenconverter/",
      "json": "https://tesign.com/item/zenconverter/index.json",
      "markdown": "https://tesign.com/item/zenconverter/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/zenconverter/",
      "json": "https://tesign.com/en/item/zenconverter/index.json",
      "markdown": "https://tesign.com/en/item/zenconverter/index.md"
    }
  },
  "name": "ZenConverter",
  "use_label": "On-phone file conversion for Android",
  "one_liner": "Android converter for video, audio, images and PDFs — runs on the phone, no uploads",
  "text": {
    "why": "Android converter apps tend to be ad-heavy or upload your file first; this one is written in Kotlin and Jetpack Compose and does every conversion inside a foreground service on the device. Video (MP4/MKV/MOV) and audio (MP3/M4A/WAV/FLAC/OPUS) are truly re-encoded with FFmpeg; it also handles images including HEIC, PDF merge, compression and encryption, TTF/OTF/WOFF2 fonts and SRT/VTT/LRC/ASS subtitles, with Real-ESRGAN upscaling on NCNN Vulkan. The INTERNET permission is used only for manual update checks and on-demand model/font downloads, and the supported routes and their limits are written down in a public support-matrix.md (v0.2.3, 2026-09-12).",
    "take": "The point is refusing the upload-first habit and publishing what works and where it breaks in a table; the price is that large videos draw on the phone's own storage, memory and battery.",
    "build": [
      "As AGPL source you could cut a lightweight fork that keeps only one job (say, batch WEBP conversion of product photos plus metadata stripping), and its queue design — foreground service → engine routing → save — is a reference for other Android media apps."
    ],
    "who": [
      {
        "role": "People shrinking a video or turning it into a GIF on the phone",
        "situation": "without a server upload"
      },
      {
        "role": "Anyone stripping photo metadata before sharing",
        "situation": "JPGs are cleaned without re-encoding and can be restored from the backup"
      },
      {
        "role": "Android media-app developers",
        "situation": "a Compose + foreground service + FFmpeg pipeline to study"
      }
    ],
    "start": [
      {
        "command": false,
        "text": "1. Install from Google Play (package org.zenconverter.app) or the APK on GitHub Releases"
      },
      {
        "command": false,
        "text": "2. Add files → pick the target format and options per file → the ready queue runs in a foreground service"
      },
      {
        "command": false,
        "text": "# Development setup is in docs/development-setup.md — no build commands in the README [확인 필요]"
      }
    ],
    "caveat": [
      "AGPL-3.0 — the README says 'GNU AGPL v3.0 or later', the homepage 'AGPL-3.0+' (third-party libraries, native binaries and bundled fonts keep their own licences)",
      "Android only; minimum Android version is not stated in the README [확인 필요]",
      "Office conversion is beta (limited layout fidelity, 64 MiB source cap) and frame interpolation is experimental; large videos need free storage, memory and power"
    ]
  },
  "cta": {
    "type": "install",
    "label": "INSTALL",
    "url": "https://zenconverter.xlab.my/"
  },
  "ready": "install",
  "categories": [
    "productivity",
    "media"
  ],
  "categories_confirmed": true,
  "tags": [
    "android",
    "kotlin",
    "jetpack-compose",
    "ffmpeg",
    "file-converter",
    "local-first"
  ],
  "platform": [
    "android"
  ],
  "license": {
    "spdx": "AGPL-3.0",
    "scope": "copyleft",
    "scope_text": "Release source if you redistribute or host it as a service.",
    "url": "https://spdx.org/licenses/AGPL-3.0.html",
    "note": null,
    "open_source": true
  },
  "language": "Kotlin",
  "source_urls": {
    "canonical": "https://zenconverter.xlab.my/",
    "github": "https://github.com/jasonzhu1207/zenconverter",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "github",
        "url": "https://github.com/jasonzhu1207/zenconverter",
        "posted_at": "2026-09-04T03:00:00.000Z",
        "hn_url": null
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 1364,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-15T19:35:07.007Z",
    "stars_observed_since_check": 0,
    "star_delta_24h": null,
    "star_delta_7d": 13,
    "star_delta_30d": 27,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      6,
      4,
      2,
      2,
      null,
      null,
      null,
      4,
      7,
      2,
      null,
      null,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": null,
    "hn_points_observed_at": null,
    "store": null,
    "method": "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours."
  },
  "ranks": null,
  "activity": {
    "pushed_at": "2026-09-14T16:01:20.000Z",
    "owner_type": "User",
    "open_issues": 2,
    "contributors": 4,
    "releases_count": 15,
    "latest_release": {
      "tag": "pre-release",
      "published_at": "2026-09-14T16:01:23.000Z",
      "prerelease": true
    },
    "checked_at": "2026-09-15T19:35:07.007Z",
    "core_checked_at": "2026-09-15T19:35:07.007Z"
  },
  "signals": [
    {
      "kind": "back",
      "label": "BACK CATALOG",
      "value": null
    }
  ],
  "images": {
    "og": "https://tesign.com/img/zenconverter-1e5195cf95.png",
    "cover": "https://tesign.com/img/zenconverter-1e5195cf95.png",
    "cover_width": 2400,
    "cover_height": 1260,
    "gallery": [
      "https://tesign.com/img/zenconverter-1e5195cf95.png",
      "https://tesign.com/img/zenconverter-ade9d8a23a.png"
    ],
    "alt": "The ZenConverter app: a Material 3 conversion queue listing each file's target format and progress",
    "tier": 1
  },
  "dates": {
    "first_seen_at": "2026-09-13T09:39:49.913Z",
    "source_created_at": "2026-07-09T09:29:10.000Z",
    "discovery_hours": 1584.177753611111,
    "launch_signal_at": "2026-09-04T03:00:00.000Z",
    "kept_at": "2026-09-14T19:27:43.603Z",
    "first_published_at": "2026-09-14T19:27:43.743Z",
    "updated_at": "2026-09-15T04:36:57.065Z",
    "ingestion_mode": "backfill"
  },
  "notes": [
    "This file was produced by the same build, from the same data, as the tesign.com item page. The text is editorial; the numbers are stored observations.",
    "null in the JSON means not observed — never zero. The Markdown writes [unconfirmed] for it.",
    "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours.",
    "Reconstructed from archive data, not a live discovery.",
    "A summary, not legal advice."
  ]
}
