Reference
How Glass Image Tools works, with the numbers. Every figure here is a value in the source code, checked on October 31, 2026, so you can look it up. Privacy covers what is kept and sent.
Sizes and limits
| Limit | Value | Why |
|---|---|---|
| Largest file you can open | 256 MiB | Checked before and after the private copy is made, so an oversized file is never decoded. |
| Largest image you can open | 200 megapixels | Rejects oversized source images before processing. |
| Largest crop you can export | 100 megapixels | Limits full-resolution rendering allocations. |
| Open images per window | 8 | Use New Window for more. |
| Retained image budget per window | 512 MiB | Estimated source/preview cost for Open Images and Recents. Large exports can use additional memory. |
| Preview size | 2,048 pixels on the long side | The canvas draws a smaller copy; Copy, Share and Save always use the full-resolution original. |
| Zoom | 100% to 800% | Each step in the menu is 1.5×. |
Crop
- Presets: Freeform, 1:1, 16:9 and 4:3. A preset makes the largest crop of that shape that fits, centered on the image.
- Exact fields: Left, Top, Width and Height, in the original image’s pixels. Typing a value switches to Freeform.
- Rotate Left turns the image 90° counterclockwise; the fields then follow the rotated view.
- The dimmed area outside the crop is only a guide on screen. It isn’t in anything you copy or save.
Annotations
| Setting | Range | Starts at |
|---|---|---|
| Stroke width | 1 to 80 pixels | Scaled to the image: its width ÷ 400, between 2 and 24 pixels |
| Font size | 8 to 1,000 pixels | 48 pixels |
| Pixelate block size | 16 to 320 pixels, in steps of 4 | Four times the stroke width |
| Text | Font, bold, italic, underline, alignment, color | “Label”, in red |
| Fill | On or off, any color and opacity, for closed shapes | Off |
Kinds: rectangle, rounded rectangle, ellipse, triangle, speech bubble, line, arrow, freehand drawing, text and pixelate. Pixel values are in the original image’s pixels, so an annotation is the same size in the output whatever the zoom. Annotations are drawn after the crop, and anything outside the crop is clipped from the output.
What Copy, Share and Save produce
| Action | Format | Notes |
|---|---|---|
| Copy | PNG | On the system clipboard, the same as Share › Copy. The app keeps no copy and no history. |
| Share (top of the window) | PNG | Through Apple’s share sheet. |
| Export | PNG, or JPEG at 10% to 100% quality | JPEG flattens transparency onto white. The sheet shows the size in pixels and the file size before you send it. |
| Save New Image to Photos | PNG or JPEG, as chosen in Export | Always a new photo; the original is untouched. |
Every new image is rendered fresh from the original’s pixels, so it carries no metadata from the original: no location, camera, or dates. The original file’s orientation is applied first, so a rotated or mirrored photo comes out upright. Pixelated areas are rebuilt from blocks in the new image itself; the detail beneath them isn’t in the file.
Color
If the screenshot or an annotation color is wide-color, the new image is Display P3; otherwise it’s sRGB. Either way it’s 8 bits per channel. HDR brightness above standard white isn’t kept.
What’s stored, and where
| What | Where | How long |
|---|---|---|
| A private copy of each image you open | The app’s temporary folder, protected while the headset is locked | While it’s open or in Recents. Anything left after a force-quit is deleted at the next launch. |
| Crop, annotations and Undo history | Memory only | Until you close the image. |
| Recents | The app’s temporary folder | Until Clear Recents or the window closes. |
| The file being prepared to copy, share or save | The app’s temporary folder | Until the action finishes; leftovers are deleted at the next launch. |
| Appearance (Opacity, Glass) | The app’s preferences | Until you change them or delete the app. |
The image description
On visionOS 27 or later, when Apple Intelligence is on and its model can read images, the app sends the preview of the original to Apple’s on-device model through the Foundation Models framework, asking for one factual sentence and treating any text in the image as content, never as instructions. Replies are limited to 100 tokens and shown up to 1,000 characters. One description is made at a time across all windows. If the model is busy it tries again after 2 seconds; if it’s still getting ready, after 30. Nothing about it is saved.
Permissions
- Photos, add only: “Save a new copy of your edited image to Photos. Your original is never changed.” Asked the first time you save to Photos.
- Photos and Files opening use Apple’s pickers, which need no permission: the app receives only what you pick.
- No camera, microphone, location, contacts, full Photos access or screen-capture entitlement.
Accessibility
- Standard visionOS controls throughout: windows, toolbars, menus, forms, sheets and the share sheet.
- The canvas, crop corners, annotations and their corners have spoken names and hints; pixel fields read as “Width, pixels”.
- At the largest text sizes, Undo, Redo and Export move into a ⋯ menu and paired fields stack.
- Reduce Transparency makes the window background opaque.
- Tested in the simulator with Apple’s automated accessibility audits and the largest text size; not yet tested on a headset with VoiceOver, Voice Control, Switch Control or keyboard-only navigation.
Capture
The app doesn’t capture the screen. visionOS 27 offers apps a system picker for sharing screen content (ScreenCaptureKit), but on visionOS an app can’t list other apps’ windows or take a screenshot directly. A separate experiment in the source (GlassImageToolsCaptureProbe) compiles against those tools; no capture path has been confirmed working on a headset, and the editor doesn’t depend on one. The full findings are in CAPTURE_CAPABILITIES.md.
For developers
- Swift 6 and SwiftUI, Apple frameworks only, no third-party dependencies. The app runs on visionOS 26 or later.
Sources/VisionSnipCoreholds the image model, geometry, import and rendering, with no UI.swift testruns its image-core checks on a Mac.- Image-link Paste uses one direct HTTPS URL, with at most five HTTPS redirects, no cookies/credential storage/cache, a 256 MiB transfer cap, a 20-second inactivity timeout and a 60-second transfer timeout. It reuses the normal protected source and bounded preview loader.
App/holds the visionOS interface.UITests/holds native interface regression checks; exact run results are recorded in the repository’s verified status.- The Xcode project is generated from
project.ymlwith XcodeGen and checked in; regenerate only after changing targets or settings. - The icon is three SVG layers in
Tools/Icon;swift Tools/GenerateIcon.swiftrebuilds the visionOS image stack. - This site is
site/, built bypython3 scripts/build_site.py, withPRIVACY.mdrendered from the repository so the two can’t disagree.
CONTRIBUTING.md has the details.