Projects › CircleConvert

CircleConvert

Ctrl+Alt+Shift+Click a file on the desktop, pick a format from the ring that opens around it, and the converted copy appears right next to it.

CircleConvert is a small Windows tool that lives in the notification area. Hold Ctrl+Alt+Shift and click any file on the desktop, and a ring of formats blooms out around its icon. Click one and the ring folds into a progress circle around the icon. When it’s done, the new file is put in the nearest empty spot on the desktop, right next to the original. There’s no window, no dialog and no “Save as”. Will be releasing it for free very soon.

What it converts

  • Images: PNG, JPG, WebP, BMP, GIF, TIFF, ICO and AVIF. It also reads HEIC, PSD, SVG and TGA. Animated GIFs and WebPs stay animated, and icons are written with every size from 16 to 256 pixels.
  • Video: MP4, MKV, WebM, MOV, AVI and GIF, or just the sound as MP3 or WAV. An animated GIF can become an MP4 or WebM.
  • Audio: MP3, WAV, FLAC, OGG, M4A and Opus.

The ring only offers what makes sense for the file you clicked, and each kind has its own colour. Images are converted inside the app with Magick.NET. Audio and video go through ffmpeg, which it finds on its own, and it notices if you install ffmpeg later without needing a restart.

How it works

  • A low-level mouse hook watches for the click. It only reacts when the window under the mouse is the desktop’s own icon list, and it swallows that click so Explorer never sees it.
  • To find out which file was clicked, it asks Explorer’s desktop view directly over COM (the technique from Raymond Chen’s blog), with UI Automation for the icon’s exact outline.
  • The ring is a transparent, always-on-top WPF window centred on the icon. Near the edge of the screen the formats fan out over whatever part of the circle stays on screen.
  • The progress is real: for audio and video it reads ffmpeg’s progress output against the file’s length, and for images it uses Magick.NET’s progress events.
  • The finished file is moved onto the desktop and placed into the nearest free grid cell. Cells are reserved while a conversion runs, so several conversions at once never land on top of each other.

The tray icon has a “Start with Windows” switch and a log. It needs the .NET 8 Desktop Runtime, and ffmpeg for audio and video.

Screenshots

How this page is styled (Radial theme)
  • The colours are the ring menu's own: near-black, dark chips, and one colour per kind of file (teal for images, violet for video, amber for audio). The font is Segoe UI, the one the app uses, so it only shows on Windows; other systems get their own interface font.
  • Every heading starts with a small outlined chip, and the tags are chips too. Hover one and it fills with its colour and grows to 115% in 120 ms, the same as a chip in the app.
  • The tray icon at the top right of the header is one conic-gradient with three arcs, cut into a ring by a mask that also keeps the white dot. Hover the header card and it spins at the app's waiting speed, one turn every 0.9 seconds.
  • Hover the header picture and the conversion finishes. A copy of the ring sits exactly on top of the one in the picture, as a conic-gradient masked into a ring. Its fill and colour are custom properties registered with @property, which is what lets a keyframe animate them: it fills the rest of the way, turns green, and a check badge pops at its top-right. Sizes are in cqw, so it lines up at any width.