[Feature]: Formats keep piling up and nothing on a format says who it's for — how should Filee handle this before we add more?
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 18/100
調査の方向性
Start by reading FormatCategory in FileFormat.cs, FormatRegistry.Known, BuiltInData, ToolbarProfile, and PresetFormatTip.DefaultTargets; the issue describes these as the existing places that classify and display formats. Read docs/ADDING-A-CONVERTER.md for the current format addition process. The issue asks maintainers to choose a direction across format intake, metadata, and user-facing lists, so the work is not ready to implement until that design is decided.
索引モデルが issue の本文から書いたものです。
説明
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.Knownat 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* |
| — | — | — | ||
| 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:
- 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.
- "How common" exists, but not on the format. Registry order, the donut faces and
DefaultTargetseach decide it separately, with no shared rule, and nothing on the format itself records it. - 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. - 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
Writableonly, 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.mdlike the category is today.
Layer 3: what users see
- (a) Hand-picked as today, plus the field switches from #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.
- 主要言語
- C#
- スター
- 3.6k
- フォーク
- 192
- 平均マージ
- 6時間 58分
- マージ済み PR(30日)
- 393
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
KnifeLemon/Filee のほかの issue
-
[Format]: .dartオープンformats
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
KnifeLemon/Filee#980 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
KnifeLemon/Filee#981 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 4/5 1週間以上 初心者へのやさしさ 18/100
KnifeLemon/Filee#979 ·
メンテナーはふだん 1 日以内に返信
-
[Format]: .3dmオープンformats possible duplicate
難易度 4/5 1週間以上 初心者へのやさしさ 22/100
KnifeLemon/Filee#978 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[Format]: .snagxオープンformats
難易度 3/5 1〜2日 初心者へのやさしさ 40/100
KnifeLemon/Filee#976 ·
メンテナーはふだん 1 日以内に返信
KnifeLemon/Filee の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信
-
bug effort:S P3
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
nightscout/nocturne#3219 ·
メンテナーはふだん 1 日以内に返信
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
bug P2
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信