Open Source Case Study

GetRounded Desktop App

PythonpywebviewTailwind CSSHTML5 Canvas
GetRounded hero poster

The Friction of Web Tools

High Friction Workflows

Rounding the corners of a screenshot is a trivial task that historically demands disproportionate friction. Users are forced to launch heavy design tools like Figma or Photoshop, manually draw a vector mask, and export the file.

GetRounded.app
Drop Screenshot Here
Border Radius24px

Security Sandbox

Ad-ridden online tools force users to upload potentially sensitive corporate screenshots to a remote, untrusted server just to execute a basic CSS operation.

local_render.py
def process_image(filepath):
# Intercepts drop natively
if not os.path.exists(filepath):
return False

# Zero network calls
canvas = CanvasEngine(filepath)
canvas.apply_mask(radius=24)

return "SUCCESS"

A Privacy-First Solution

The market lacked a zero-friction, privacy-first desktop app that could operate offline, bind to local file paths, and execute rendering locally.

LOCAL SSD
ENCLAVE

"I architected GetRounded from scratch specifically to bypass the massive footprint of traditional Electron apps, hooking directly into native OS rendering engines."

Creator & Developer

The Rendering Pipeline

FrontendNative BridgeHost SystemHTML/JS UITailwind · Canvas RenderpywebviewCross-Platform Web EnginePython ShellFile System AccessDrop Handling
Control flowData & stateNetwork

The Python host binds system drops to real file paths, while the lightweight Tailwind UI handles the rendering via HTML5 Canvas. pywebview bridges the gap.

The Anti-Electron Architecture

pywebview & Python

Shipping a massive 150MB Chromium binary for a simple utility is an architectural anti-pattern. Instead, I built the application using pywebview, which instantiates a lightweight Python server and hooks directly into the host operating system's native web engine (WebKit on macOS, EdgeHTML on Windows). This hybrid approach reduces the binary size by 90% while allowing the Python backend to execute privileged OS-level operations that are strictly sandboxed in standard browsers.

Bypassing the Security Sandbox

Native Event Interceptors

A standard JavaScript environment cannot resolve the absolute physical file path of a dragged-and-dropped image due to strict OS sandboxing, which normally prevents web apps from blindly overwriting local files. To circumvent this safely, I intercepted the drop event natively in the Python shell. By binding a custom handler with prevent_default=True, I captured the absolute file URI natively before the webview could process it. This absolute path is then securely marshaled across the bridge to the JS frontend.

Canvas Memory Optimization

HTML5 Rendering API

The actual image rounding does not rely on heavy image processing libraries like Pillow or OpenCV. Instead, it utilizes a highly optimized HTML5 Canvas operation. The app mathematically calculates the clipping boundaries based on the user's slider input, builds a bezier-curve rounded rectangle path, applies a 2D clipping mask, and draws the pixel buffer into memory. To prevent memory leaks when processing massive 4K uncompressed PNGs, the canvas context is strictly garbage collected, and the output is instantly serialized back to the host file system.

Let’s work together

Have a project in mind?

patharia52@gmail.com
Connect & Follow
Open to Work© 2026 Mustafa Patharia. All rights reserved.