{"id":50720159,"url":"https://github.com/thejoefin/win-icon-finder","last_synced_at":"2026-06-09T23:01:56.023Z","repository":{"id":361321771,"uuid":"1249418301","full_name":"TheJoeFin/Win-Icon-Finder","owner":"TheJoeFin","description":"A WinUI 3 desktop application for browsing, sketching, and exporting the full Fluent System Icons library (~1,600 icons). Find the right icon by name or by drawing it freehand or navigating a similarity map.","archived":false,"fork":false,"pushed_at":"2026-06-08T02:44:58.000Z","size":4613,"stargazers_count":6,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T04:22:07.638Z","etag":null,"topics":["fluent","fluent-icon","icon-finder","icon-search","win-dev","windows","windows-development","winui"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TheJoeFin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T17:19:27.000Z","updated_at":"2026-06-08T02:43:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TheJoeFin/Win-Icon-Finder","commit_stats":null,"previous_names":["thejoefin/win-icon-finder"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/TheJoeFin/Win-Icon-Finder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJoeFin%2FWin-Icon-Finder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJoeFin%2FWin-Icon-Finder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJoeFin%2FWin-Icon-Finder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJoeFin%2FWin-Icon-Finder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheJoeFin","download_url":"https://codeload.github.com/TheJoeFin/Win-Icon-Finder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJoeFin%2FWin-Icon-Finder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34129072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluent","fluent-icon","icon-finder","icon-search","win-dev","windows","windows-development","winui"],"created_at":"2026-06-09T23:01:54.171Z","updated_at":"2026-06-09T23:01:56.008Z","avatar_url":"https://github.com/TheJoeFin.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WinIconFinder\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nA WinUI 3 desktop application for browsing, sketching, and exporting the full [Fluent System Icons](https://github.com/microsoft/fluentui-system-icons) library (~1,600 icons). Find the right icon by name **or** by drawing it freehand — then copy it straight into your project.\n\n---\n\n\n![Drawing to find icon](readme-images/Fluent-Icon-Finder-01.png)\n\n\n![Similarity Map](readme-images/Fluent-Icon-Finder-02.png)\n\n\n## Features\n\n### Search \u0026 Draw\n\n**Name search** — a live-filtered list narrows icons as you type. Matched icons float to the top; every other icon remains visible in alphabetical order.\n\n**Sketch-to-icon matching** — draw a rough shape on the freehand canvas. As you draw, the app renders your strokes to a 64 × 64 grayscale bitmap, computes an L2-normalised pixel vector, and scores every icon using cosine similarity against a pre-rendered vector database. The top 10 matches are highlighted with an accent tint and a percentage-match badge, and the best match is scrolled into view automatically.\n\nDrawing tools in the toolbar:\n\n| Control | Action |\n|---|---|\n| Pen size (S / M / L) | Sets stroke width (6 px / 10 px / 16 px) |\n| Undo (Ctrl+Z) | Removes the last drawn stroke |\n| Clear (Ctrl+L) | Clears the canvas and resets scores |\n| Rotate 90° | Rotates all strokes clockwise before re-matching |\n| Try mirrors | Also tests horizontally and vertically flipped versions of the sketch, useful for asymmetric icons |\n\nThe canvas displays two overlaid guides: a solid border for the full drawing area and a dashed blue line for the icon safe area, so you can proportion your sketch accurately.\n\n### Similarity Map\n\nSwitch to the **Similarity Map** tab to see all icons laid out in a scrollable 2-D spiral grid. Click any icon to make it the *pivot*. Icons are then re-sorted so visually similar icons occupy the innermost spiral cells, giving you an at-a-glance neighbourhood view that helps you discover variants and related glyphs.\n\nMap navigation:\n\n| Gesture | Action |\n|---|---|\n| Scroll wheel | Zoom in/out at pointer |\n| Pinch | Zoom in/out (touch/trackpad) |\n| Drag | Pan |\n| Tap / click | Set pivot icon |\n\nHovering over an icon shows its name in a tooltip. After selecting a pivot, the toolbar shows the same copy buttons as the Search view.\n\nYou can also jump directly from a search result to its map neighbourhood with the **Explore in Map** button in the Search \u0026 Draw toolbar.\n\n### Collections\n\nSwitch to the **Collections** tab to manage saved icon groups. The fast path is a one-click **favorite** action on every icon row, which adds or removes that icon from the built-in **Default** collection. The adjacent **more** button and the right-click context menu both let you add or remove the same icon from any number of named collections without leaving the search results.\n\nCollections workflow:\n\n| Action | Result |\n|---|---|\n| Favorite an icon | Toggles membership in the non-removable **Default** collection |\n| More / right-click → collection name | Adds or removes that icon from a named collection |\n| Collections → New collection | Creates an empty collection |\n| Collections → Save to new collection | Creates a new collection from the current multi-selection |\n| Collections → Add to collection | Adds the current multi-selection to an existing collection |\n| Collections → Remove from current | Removes the current multi-selection from the active collection |\n\nThe Collections view shows all saved groups on the left and the active collection's icons on the right, with multi-select checkboxes for batch actions.\n\n### Export formats\n\nOnce an icon is selected, four one-click copy buttons appear:\n\n| Button | Clipboard content |\n|---|---|\n| 📋 Unicode | `\\uXXXX` escape sequence |\n| `\u003c/\u003e` XAML | WinUI 3 `\u003cFontIcon\u003e` snippet (includes font family URI) |\n| 🖼 PNG | 256 × 256 PNG bitmap (black glyph on transparent background) |\n| ✦ SVG | Scalable vector SVG with real path data extracted from the font outline, using `fill=\"currentColor\"` for theme-awareness |\n\nRight-clicking any icon in the list also opens a context menu with the same export options.\n\nBulk export from **Collections** uses the same rendering pipeline:\n\n| Bulk action | Output |\n|---|---|\n| Copy glyph codes | Newline-delimited `\\uXXXX` values on the clipboard |\n| Copy glyph codes for XAML | Newline-delimited `\u0026#xXXXX;` values on the clipboard |\n| Copy XAML FontIcons | One `\u003cFontIcon\u003e` snippet per selected icon on the clipboard |\n| Export PNG files | One `256 × 256` PNG per selected icon in a picked folder |\n| Export SVG files | One vector SVG per selected icon in a picked folder |\n\n---\n\n## How it works\n\n### Icon loading\n\nOn startup, `FluentIconsService` reads the bundled `Assets/icons.json` file — a flat dictionary mapping glyph names (e.g. `ic_fluent_arrow_circle_up_24_regular`) to decimal Unicode codepoints. Icons are grouped by their base name, the 24 px variant is preferred, and each name is converted to title-case for display (`Arrow Circle Up`).\n\n### Sketch matching\n\n`IconMatchingService` pre-renders every icon glyph at 64 × 64 using Win2D and the bundled `FluentSystemIcons-Regular.ttf` font. Each bitmap is converted to a grayscale pixel array and L2-normalised into a unit vector. The full vector database is written to a binary cache file (`icon_vectors.bin` in `LocalCacheFolder`) on first launch. Subsequent launches load from cache in milliseconds — the cache is automatically invalidated if the icon set or render parameters change (tracked via a fingerprint hash).\n\nWhen you draw, the same 64 × 64 pipeline is applied to your strokes (scaled to fill the canvas), then a brute-force dot-product search across all ~1,600 vectors finds the best cosine matches.\n\nSVG export uses `CanvasGeometry.CreateText` + `ICanvasPathReceiver` to extract real cubic Bézier outlines from the font — no pixel rasterisation.\n\n### Similarity map layout\n\n`SimilarityLayoutService` generates a square outward spiral of grid coordinates. The pivot icon occupies cell (0, 0); all other icons are placed at spiral positions ordered by their cosine similarity to the pivot. Sorting is O(n log n) and completes in under 5 ms.\n\n---\n\n## Architecture\n\n```\nWinIconFinder/\n├── Models/\n│   ├── FluentIcon.cs              # Icon data model (name, codepoint, match + collection state)\n│   ├── IconCollection.cs          # UI-facing collection summary model\n│   ├── IconCollectionRecord.cs    # Persisted collection record (name + icon names)\n│   └── IconCollectionsStore.cs    # Root JSON payload for saved collections\n├── Services/\n│   ├── FluentIconsService.cs      # Loads icons.json, deduplicates variants\n│   ├── IconMatchingService.cs     # Win2D rendering, cosine similarity search, cache, PNG/SVG export\n│   ├── ClipboardExportService.cs  # Copies glyph code, XAML, PNG, SVG to clipboard\n│   ├── IconCollectionsService.cs  # Persists Default + named collections in app-local JSON\n│   ├── CollectionExportService.cs # Writes batch PNG/SVG exports to a picked folder\n│   └── SimilarityLayoutService.cs # Spiral grid layout for the similarity map\n├── ViewModels/\n│   └── MainPageViewModel.cs       # MVVM glue for search, map, collections, and export\n├── MainPage.xaml / .cs            # Main UI — search, drawing canvas, similarity map, collections\n├── MainWindow.xaml / .cs          # App window host\n└── Assets/\n    ├── icons.json                  # Fluent icon name → codepoint mapping\n    └── FluentSystemIcons-Regular.ttf # Bundled icon font\n```\n\n**Dependencies**\n\n| Package | Version | Purpose |\n|---|---|---|\n| Microsoft.WindowsAppSDK | 2.1.3 | WinUI 3, packaged app runtime |\n| Microsoft.Graphics.Win2D | 1.4.0 | Hardware-accelerated 2D rendering |\n| CommunityToolkit.Mvvm | 8.4.2 | Source-generated MVVM helpers |\n\nTarget framework: `.NET 10` — `net10.0-windows10.0.26100.0`  \nMinimum OS: Windows 10 version 1809 (build 17763)  \nArchitectures: x86, x64, ARM64\n\n---\n\n## Requirements\n\n- Windows 10 version 1809 or later\n- [Visual Studio 2022](https://visualstudio.microsoft.com/) with the **Windows application development** workload  \n  *or* the [.NET 10 SDK](https://dotnet.microsoft.com/download) with the `Microsoft.WindowsAppSDK` workload\n- **Developer Mode** enabled (`Settings → System → For developers → Developer Mode`)\n\n---\n\n## Building \u0026 running\n\n### Option 1 — `BuildAndRun.ps1` (recommended)\n\n```powershell\n.\\BuildAndRun.ps1                        # Auto-detect platform, build + run\n.\\BuildAndRun.ps1 -SkipRun               # Build only\n.\\BuildAndRun.ps1 /p:Configuration=Release  # Release build + run\n.\\BuildAndRun.ps1 --detach               # Launch app in background\n```\n\nThe script:\n1. Verifies Developer Mode is enabled\n2. Auto-detects the current CPU architecture (x64 / ARM64)\n3. Locates MSBuild via `vswhere`, falling back to `dotnet build`\n4. Builds the project and launches the packaged app with `winapp run`\n\n### Option 2 — Visual Studio\n\nOpen `WinIconFinder.slnx`, select your target platform (x64 / ARM64), and press **F5**.\n\n### Option 3 — dotnet CLI\n\n```powershell\ndotnet build WinIconFinder.csproj -p:Platform=x64\nwinapp run bin\\x64\\Debug\\net10.0-windows10.0.26100.0\\win-x64\\\n```\n\n\u003e **Note:** `winapp` is the [Windows App SDK CLI](https://learn.microsoft.com/windows/apps/windows-app-sdk/deploy-packaged-apps) helper that registers the debug package identity required to run packaged WinUI apps outside of Visual Studio.\n\n---\n\n## First launch\n\nOn first launch, the app pre-renders all ~1,600 icons to 64 × 64 bitmaps and saves them to the cache. A loading overlay with a progress bar is shown during this phase. On subsequent launches the cache is loaded instantly and the overlay disappears in under a second.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for build instructions, code style guidance, and how to submit a pull request.\n\n## Third-party assets\n\nThe bundled font (`FluentSystemIcons-Regular.ttf`) and codepoint map (`icons.json`) are from Microsoft's [Fluent System Icons](https://github.com/microsoft/fluentui-system-icons) project, licensed under the **MIT License**.\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthejoefin%2Fwin-icon-finder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthejoefin%2Fwin-icon-finder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthejoefin%2Fwin-icon-finder/lists"}