Skip to content

Feature request: user-adjustable UI scale / font size in Settings #85

Description

@joshleethecreator

Summary

There is currently no way for a user to increase the UI/font size in the desktop app. On a high-resolution display the interface reads quite small, and none of the usual escape hatches work. I'd like a UI scale (or font size) control in Settings.

Why the existing mechanisms don't cover this

The desktop app already computes a renderer zoom factor in desktop/window-scale.ts, but it is deliberately one-directional:

// desktop/window-scale.ts:70
const fittedScale = Math.min(
  1,
  validDimension(contentWidth) / baselineWidth,
  validDimension(contentHeight) / baselineHeight,
);

Because it is clamped to Math.min(1, …), the factor can only ever shrink the UI (floor DESKTOP_MIN_SCALE = 2 / 3, line 3) when the window gets smaller than its startup canvas. Enlarging the window never enlarges the UI above 100%.

A few related observations:

  1. No zoom accelerators. No application menu is built (desktop/main.ts:407 only pops a context menu), so Electron's stock Ctrl++ / Ctrl+- zoomIn/zoomOut menu roles never get registered.
  2. Manual zoom doesn't stick. installResponsiveWindowScale re-applies setZoomFactor on every resize (desktop/window-scale.ts:118), so a zoom level set by any other means is overwritten on the next resize event.
  3. A CSS-level fix wouldn't be enough. The styling is predominantly hardcoded pixels — roughly 168 font-size: Npx declarations against ~34 in rem across src/. Changing a root font-size would rescale only a small fraction of the interface and leave the rest, so this likely wants to be a zoom-factor feature rather than a typography one.

Proposed behavior

A user-set scale multiplier in Settings (something like 80%–150%), persisted with the other app settings, that feeds into resolveDesktopWindowScale — for example composing with the fitted scale rather than being capped at 1, so the automatic shrink-to-fit behavior is preserved while allowing values above 100%. Bonus: register zoomIn/zoomOut/resetZoom accelerators alongside it.

Current workaround

Launching Electron with Chromium's device scale factor works and does not fight the existing logic, because installResponsiveWindowScale captures its baseline from the window at startup, so fittedScale still begins at 1:

electron --force-device-scale-factor=1.25 desktop-dist/main.mjs

That's fine when running from source, but it isn't reachable for anyone using a packaged build.

Environment

  • OpenChatCut v0.2.3
  • Linux (Ubuntu 24.04, GNOME/Wayland)
  • Electron 43.1.1, running from source

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions