Skip to content

[Feature]: Formats keep piling up and nothing on a format says who it's for — how should Filee handle this before we add more? #832

Closed

Description

@SeoJCalive

What would you like Filee to do?

Formats have been added much faster than we have any way to sort them. Nothing on a format says who it's for or how common it is, so every new one lands in every user's lists, and the busy donuts are already full. I found this while counting for #806. That issue is about what the default donuts show; this one is about why that keeps breaking: how formats come into Filee and what they say about themselves. I don't have the answer, but I'm fairly sure that if we keep adding formats this way, Filee gets harder to use with each one, so I'd like to decide how it handles this before more formats arrive.

Where things stand (upstream/main; sources in brackets)

  • Filee knows 270 formats. It knew 26 in v1.0.0 a month ago, 172 in v1.2.0 and 256 in v2.0.0 [FormatRegistry.Known at each tag]. 32 format requests are open, many of them specialist (STEP, DGN, 3DM, SKP, BLEND, MAX, OSM, GRIB, NetCDF, BLP, Minecraft packs, MIDI, ...).
  • Everything Filee can write reaches everyone:
    • the preset editor's target list shows 176 output formats,
    • the preset library and the toolbar editor's palette show all of them too,
    • the toolbar page lists all 19 donuts.
  • The busy donuts are full. The image donut uses all 12 slots on both faces, and the video donut uses 11 and 12 [BuiltInData, ToolbarProfile.MaxSlices].
  • I sorted all 270 formats by hand into four classes (full table below; it's my judgement, so some calls are debatable, and I counted HWP and HWPX as everyday because of Korean users). 91 of the 176 output formats are specialist or legacy, and only 18 of those sit in categories of their own (CAD, 3D, maps, fonts). The rest are inside Image, Video, Audio, Text, Ebook and the other everyday categories. The table gives each format a single class, so it mixes two different things: who uses a format, and how often anyone wants it. It's here to show the size of the problem; if we go ahead, I'd redo it on two separate axes.
Class What it means Formats Output formats
Everyday Most people make or receive it 19 19
General General use, but less common 95 66
Specialist Mainly used in one field 104 65
Legacy Rarely made any more 52 26
Total 270 176
Specialist formats by field
Field Formats (* = read-only) Output
Developer PPM, ICNS, QOI, CUR, PAM, PFM, MIFF, JSONL, YAML, TOML, HAR*, M4S*, CAF, TAR, TGZ, TBZ2, TXZ, TAR7Z*, TLZ*, GZ, BZ2, XZ, LZ*, LZMA*, JAR*, CAB*, CPIO*, DEB*, RPM* 18
Technical writing RST, TEX, ORG, ADOC, TYP, MEDIAWIKI, DBK, IPYNB, MAN, OPML 10
Broadcast & video production DV, MXF, CAVS*, AC3, MP2, EAC3, DTS*, SCC* 5
Hi-fi audio WV, TTA, W64, APE*, MPC*, TAK*, DSF*, DFF* 3
Design & print PSD, PSB, XCF*, EPS, PS, AI*, CDR* 4
3D GLB, GLTF, STL, OBJ, 3MF, PLY, FBX* 6
Fonts TTF, OTF, WOFF, WOFF2, EOT, FON* 5
Maps & GPS GEOJSON, KML, KMZ, GPX, SHP, FIT* 5
Subtitling ASS, SSA*, VTT, TTML, SUB 4
Photo & VFX JP2, EXR*, HDR*, RAW* 1
Games TGA, DDS, USM*, BIK* 2
CCTV DAV*, H265*, H264* 0
Embroidery & plotters PLT*, DST* 0
CAD DWG, DXF 2
Medical DCM* 0
Science FITS* 0
Dictation DSS* 0
Every format by category and class
Category Everyday General Specialist Legacy
Image PNG, JPG, WEBP, GIF, HEIC TIFF, BMP, ICO, AVIF, JXL, APNG, JXR*, LIVP* JP2, PSD, PSB, TGA, PPM, ICNS, QOI, DDS, CUR, PAM, PFM, MIFF, DCM*, EXR*, HDR*, FITS*, XCF*, RAW* MNG, PCX, XPM, XBM, WBMP, SGI, RAS, PCD*
Vector — SVG, SVGZ, EMF, VSD*, ODG, FODG* EPS, PS, AI*, CDR*, PLT*, DST* WMF, CGM*
Pdf PDF — — —
Document DOCX DOCM, DOTX, DOTM, DOC, DOT*, ODT, FODT, OTT, RTF, WPS*, OFD*, PAGES*, PUB*, EML, MSG* — WPD*, LWP*, ABW*, SDW*, CWK*, MCW*, 602*, PSW*
Hwp HWPX, HWP — — —
Spreadsheet XLSX, CSV XLSM, XLTX, XLS, XLT, ODS, OTS, FODS*, TSV, ET*, NUMBERS* — SDC*
Presentation PPTX PPTM, POTX, POTM, PPSX, PPT, ODP, OTP, FODP*, KEY*, DPS* — SDA*
Text TXT MD, HTML, MHTML* RST, TEX, ORG, ADOC, TYP, MEDIAWIKI, DBK, IPYNB, MAN, OPML TEXTILE
Data — JSON, XML, VCF, ICS JSONL, YAML, TOML, HAR* —
Ebook — EPUB, KEPUB, AZW3, FB2, CBZ, CBR*, CB7*, CBT*, CBC* — MOBI, AZW*, AZW4*, PRC*, HTMLZ, TXTZ, CHM*, LIT, LRF, PDB, PML, RB, SNB, TCR, OEB*
Video MP4, MOV M4V, MKV, WEBM, AVI, WMV, MPG, TS, M2TS, OGV DV, MXF, CAVS*, USM*, M4S*, DAV*, BIK*, H265*, H264* FLV, 3GP, 3G2, VOB, MOD*, RM*, SWF*, WTV*
Audio MP3, M4A, WAV M4B, AAC, FLAC, OGG, OPUS, WMA, AIFF, WEBA, MKA, QTA* AC3, CAF, MP2, DSS*, WV, TTA, W64, EAC3, APE*, MPC*, TAK*, DSF*, DFF*, DTS* AMR, AU, VOC, SPX*
Archive ZIP 7Z, RAR*, DMG*, ISO*, IMG*, ALZ*, EGG*, SPLIT* TAR, TGZ, TBZ2, TXZ, TAR7Z*, TLZ*, GZ, BZ2, XZ, LZ*, LZMA*, JAR*, CAB*, CPIO*, DEB*, RPM* TZ*, Z*, LHA*, ARJ*
Cad — — DWG, DXF —
Font — — TTF, OTF, WOFF, WOFF2, EOT, FON* —
Subtitle — SRT, SMI, LRC ASS, SSA*, VTT, TTML, SUB, SCC* —
Model3D — — GLB, GLTF, STL, OBJ, 3MF, PLY, FBX* —
Geo — — GEOJSON, KML, KMZ, GPX, SHP, FIT* —

How formats are sorted today

There is more than the category. Five things in the code already sort formats, each for its own purpose:

What Where Sorts by Used for
Category (18) FormatCategory in FileFormat.cs Kind of data Palette tabs, which options the preset editor shows (ShowPdf, ShowVideoMaxSize, ...), labels in the target list, grouping in the format tip
Writable FileFormat.Writable Whether Filee can write it Keeps 94 read-only formats out of the target list
Registry order FormatRegistry.Known Position inside a category Order of the target list (comment in PresetEditorViewModel)
Donut front / back BuiltInData profiles, ToolbarProfile The back holds "less common formats and tools" Each donut's hand-picked slices
Built-in preset targets PresetFormatTip.DefaultTargets A format some built-in preset makes counts as common Sorting in the format tip

Why this doesn't hold up as formats grow:

  1. The category can't carry more. It drives behaviour (which options show, which tab a preset sits in), so DICOM can't be moved into a "medical" group without losing its image options. Who a format is for would need a place of its own.
  2. "How common" exists, but not on the format. Registry order, the donut faces and DefaultTargets each decide it separately, with no shared rule, and nothing on the format itself records it.
  3. A new format gets none of those signals. It isn't on any donut and isn't in DefaultTargets, yet it shows up in the target list and the palette's All tab right away. The front/back split only works inside a donut's 12 slots and does nothing for the lists.
  4. The only per-format visibility switch is Writable, and it answers "can Filee write it", not "who wants it". So every writable specialist or legacy format reaches every user's lists.

What one more format costs today

  • Everyone's target list, preset library and palette get longer, whether or not they will ever use it, and what they do use gets harder to find.
  • The busy donuts have no free slots, so a useful new conversion either stays off the donut or pushes another one off. On the image donut this has already happened: "Extract Live Photo video" and "GIF" stay in the library because "Merge images" took the last slot [comment above the image donut in BuiltInData].
  • Every place that shows formats is either a hand-picked list (each donut's slices) or everything (the lists above). So each new format either needs someone to place it by hand in every one of those places, or it shows up everywhere.

Why / when would you use it?

What #806 showed. We agreed to turn off whole fields (CAD, 3D models, maps, fonts, game textures), and I worked out a table for it. Counting the result:

  • With all five off, the everyday donuts lose no slices. DWG, STL and the like only ever appear on their own donuts.
  • The settings lists shrink a little: 176 → 158 target formats, 117 → 100 presets, 19 → 15 donuts in the toolbar page.
  • The busy donuts are filled by general formats, less used but not specialist (TIFF, BMP, ICO and AVIF on the image donut, MKV and AVI on video, ODT and RTF on documents), which no field switch touches.
  • Switches built on categories reach only 18 of the 91 specialist and legacy output formats; the other 73 live inside Image, Video, Audio and the rest.

So adjusting what's shown, one surface at a time, doesn't hold: every new format undoes it. At the pace of the last month (26 → 270), and with 32 requests open, the target list could pass 200 output formats and the donuts would keep pushing useful slices off, each time for every user.

Where the problem actually sits. I think it has three layers, and #806 only touched the last one:

Layer Today
1. What gets in A format is added once an engine can handle it. Adding one doesn't ask who it's for, so nothing decides where it should show up.
2. What a format says about itself Its category and whether it's writable. How common it is gets guessed in three other places (registry order, donut faces, DefaultTargets); who uses it isn't recorded anywhere.
3. What users see Each donut's slices are picked by hand; every list shows everything writable.

Work on layers 2 and 3 can't keep up while layer 1 asks nothing of a new format, because each one has to be sorted afterwards. And which fix fits layers 2 and 3 depends on the answer to layer 1.

Ideas for how it could work

The question I can't answer for Filee: where should the breadth live? The README leads with "270 formats, no other software", so breadth is clearly a strength worth keeping. What I don't know is how it should reach users:

  • Everything in the main app, for everyone. Then growth can't be slowed, and layers 2 and 3 have to carry it.
  • Everyday formats up front, the rest still supported but kept out of the way (read-only, opt-in, or hidden until needed). Then layer 1 needs a bar, and layers 2 and 3 can stay light.

Below are the options I can see at each layer. I'm not picking among them; they mostly combine, and which ones make sense depends on the answer above.

Layer 1: what gets in

  • (a) Keep adding formats as today.
  • (b) A bar for new formats, for example: an output format only if ordinary users would want to make it; otherwise read-only, so it can be opened and converted from but never adds to the target lists.
  • (c) Specialist families (CAD, 3D, GIS, medical, games, ...) as opt-in packs, the way optional engines are already installed on demand.

Layer 2: what a format says about itself

  • (a) Category and Writable only, as today.
  • (b) Who produces it: everyone, or one or more fields that aren't tied to categories (DICOM can be "medical" while staying an Image).
  • (c) How likely someone wants to make it: for example main, more or rare. Only formats Filee can write need this, since the donut already shows only what fits the dragged files. Age is a reason a format is rare, not a value of its own: AVI and DOC are old but still common, PCX is old and rare. This would replace the three separate guesses (registry order, donut faces, DefaultTargets) with one value on the format.
  • Whatever is added would be required for every format by tests, and asked for in docs/ADDING-A-CONVERTER.md like the category is today.

Layer 3: what users see

  • (a) Hand-picked as today, plus the field switches from [Feature]: A rule for what Filee shows by default, before more formats are added #806.
  • (b) Derived from layer 2 by rule: lists show what the user works in, legacy hidden unless searched for; donut fronts hold everyday conversions, backs hold edits and general ones. Hand picks stay as overrides.
  • (c) Shaped by each user: they pick the fields they work in, and optionally their own frequent conversions (kept on the device) come forward.

I've put the field table from #806 on hold, since it would only cover a small part of layer 2. Please let me know which way you'd like Filee to go, and which of these you'd consider; I'll propose a first step based on your answer and follow your feedback.

Activity

  1. KnifeLemon commented on Oct 30, 2026

    @KnifeLemon
    Owner

    @SeoJCalive 270개를 하나하나 분류해 주셔서 고마워요. 숫자로 보니 문제가 분명해요. 출력 형식 176개 중 91개가 전문·레거시 형식인데, 그중 73개가 이미지·동영상·오디오 같은 일상 분야 안에 섞여 있어요.

    #806에서 정한 분야 단위 끄기가 이 문제의 해답과 같은 도구라고 봐요. 그래서 두 이슈를 이렇게 이어 가면 좋겠어요.

    1. 형식이 스스로 말하게: "분야 → 형식" 표에 등급도 함께

    #806의 선행 작업으로 올리기로 한 분야 → 형식 표에 형식마다 **등급(일상 / 일반 / 전문 / 레거시)**을 함께 적어요. 이 이슈에 정리해 주신 표가 그대로 첫 버전이 돼요.

    • 분야는 겹칠 수 있어요. DXF는 CAD와 벡터, SRT는 자막과 동영상에 속해요.
    • 등급은 형식마다 하나예요. 화면은 바꾸지 않고, 표와 테스트만 들어가요.
    • 테스트가 "모든 형식이 분야와 등급을 가진다"를 확인해서, 새 형식이 분류 없이 들어오지 못하게 해요.

    2. 새 형식을 받는 규칙 (제안)

    새 형식이 받는 조건
    읽기만 (입력 전용) 거의 그대로 받아요. 파일 인식만 늘고 목록·도넛 칸은 늘지 않아요.
    출력도 하는 일상·일반 형식 지금처럼 받아요.
    출력도 하는 전문·레거시 형식 기본으로 꺼진 분야에 들어갈 때만 받아요. 분야가 없으면 분야부터 정해요.
    • 레거시 출력(PCX, SGI, LRF 같은 것)은 "오래된 형식" 분야로 묶어서, 새로 설치할 때 기본으로 꺼 두는 것도 생각해 볼 만해요. 이미 쓰는 사람의 칸과 프리셋은 그대로 둬요("새로 설치할 때만" 원칙).
    • 형식 요청 템플릿에 "주로 누가, 어느 분야에서 쓰는 형식인가요?"를 한 줄 넣으면, 요청이 들어올 때부터 분야가 정해져요.

    3. 열려 있는 형식 요청 32개

    표가 머지되면 요청마다 분야를 붙이고, 위 규칙에 맞는 것만 진행해요. 예를 들어 오늘 들어온 마인크래프트 팩(#824)은 "게임" 분야(기본 꺼짐)에 들어가는 조건으로 열어 뒀어요.

    순서

    1. #806의 분야 표 이슈에 등급 열을 함께 넣기 (화면 변경 없음)
    2. 이 규칙을 CONTRIBUTING의 형식 추가 안내에 반영하기
    3. #806의 분야 끄기 화면
    4. 그다음부터 새 형식

    이 방향이 괜찮으면 분야 표 이슈를 올릴 때 등급 열도 같이 넣어 주세요. 규칙 문서(2번)는 표가 들어간 뒤에 제가 정리할게요.

  2. KnifeLemon commented on Nov 4, 2026

    @KnifeLemon
    Owner

    @SeoJCalive 정한 순서가 모두 끝나서 이 이슈는 닫을게요. 2.3.0에 들어갔어요: https://github.com/KnifeLemon/Filee/releases/tag/v2.3.0

    1. 분야·등급 표: feat(formats): add format fields and grades table #846 ([Feature]: Field → format table with a grade for every format (no UI change) #844). 모든 형식이 분야와 등급을 가지고, FormatFieldsTests가 분류 없는 형식이 들어오지 못하게 막아요.
    2. 규칙 문서: docs/FORMAT-RULES.md (docs: rules for what Filee shows by default (FORMAT-RULES.md) #890). 새 형식을 받는 조건은 규칙 5예요. docs/ADDING-A-CONVERTER.md에도 반영돼 있어요.
    3. 분야 끄기 화면: 설정 → 분야 (feat: field switches in Settings → Fields (#806) #1036), 슬롯 표를 따른 새 기본 도넛 (feat(presets): default donuts follow the #806 slot table #972), 분야를 따르는 그룹 편집기 추가 목록 (feat(toolbar): the group editor's add list follows the field switches #1052).
    4. 새 형식: 이제 규칙 5로 받아요. 예를 들어 2.3.0의 마인크래프트 팩과 Modrinth 모드팩은 기본으로 꺼진 게임 분야에 들어갔어요 (feat(formats): Minecraft packs and Modrinth modpacks (Games field) #1048).

    남은 건 하나예요. 형식 요청 템플릿에 "주로 누가, 어느 분야에서 쓰는 형식인가요?"를 묻는 한 줄은 아직 없어서, 따로 넣을게요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions