qapture2 0.7.8 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -92,7 +92,7 @@ working, and each new feature is off until someone turns it on.
92
92
  | | |
93
93
  |---|---|
94
94
  | **Screenshots frame the right thing** | Capture mode's own scroll lock used `overflow:hidden`, which **unstuck every `position: sticky` header** just before the screenshot was rendered — measured at 20px of wrongness in a 40px capture, now 0.0px. See [Screenshots: two engines](#screenshots-two-engines). |
95
- | **Pixel-exact capture (opt-in)** | A real photograph of the tab rather than a redraw — so canvas/WebGL, video, cross-origin iframes and exotic CSS all come out right. One prompt per session, Chromium desktop. |
95
+ | **Pixel-exact capture (opt-in)** | A real photograph rather than a redraw — so canvas/WebGL, video, cross-origin iframes and exotic CSS all come out right. Taken the instant capture opens, then the screen is handed straight back: one frame per capture, nothing recording in between. Desktop browsers. |
96
96
  | **Save straight to a folder** | Pick a QA folder once; every note is written to disk as it's saved, organised `Project / Campaign / notes + screenshots + REPORT.md`. See [Saving to a folder](#saving-to-a-folder). |
97
97
  | **Storage that explains itself** | A real usage meter, WebP screenshots (~10× smaller), a request to stop the browser evicting your data, and a "drop screenshots, keep findings" recovery valve. |
98
98
  | **A usable notes list** | Severity/status filter chips with counts, text search, and a "this page" toggle. |
@@ -372,23 +372,55 @@ canvas as a blank box, every time, in any tool built this way.
372
372
 
373
373
  ### `exact` — opt-in, pixel-for-pixel
374
374
 
375
- Uses the Screen Capture API to photograph **this tab's real composited
375
+ Uses the Screen Capture API to photograph **the viewport's real composited
376
376
  pixels**, then crops your rectangle out arithmetically. Nothing is
377
377
  re-rendered, so it cannot mis-frame, and everything above renders correctly
378
378
  because it was never re-drawn in the first place.
379
379
 
380
+ **The photograph is taken when you open capture mode, not when you finish
381
+ dragging.** That ordering is the whole design, and it decides three things at
382
+ once:
383
+
384
+ - **Nothing keeps recording.** The stream is acquired, one frame is taken, and
385
+ the track is stopped — about a third of a second — so the browser's sharing
386
+ indicator blinks and goes. Before 0.8 the stream was held for the entire
387
+ session so it would only prompt once, which on Safari (where the only option
388
+ is sharing a window or a whole screen) meant the indicator stayed lit and the
389
+ capture pipeline kept running behind every page. One prompt per capture is
390
+ the price of not recording you between them.
391
+ - **You crop what you can see.** The still is shown under the capture scrim
392
+ while you frame, so a page that animates cannot move between the moment you
393
+ point at something and the moment it is cropped — and a hover state, an open
394
+ dropdown or a tooltip survives being framed instead of being dismissed by the
395
+ mouse moving to start the drag.
396
+ - **Whether this shot is a photograph or a redraw is settled before you
397
+ start.** A still is either held or it is not. Previously the exact engine
398
+ reached for a frame at the end, from a stream that could quietly have died,
399
+ and fell through to `dom` without saying so — which is why the same click
400
+ could photograph one time and redraw the next.
401
+
402
+ Everything else:
403
+
380
404
  - **Turn it on** from the capture hint bar ("Pixel-exact shots") or Settings.
381
- - The browser asks once per session to share this tab. Nothing leaves the
382
- device — the frames are cropped locally and never uploaded.
405
+ Turning it on does not prompt; the first capture does.
406
+ - Nothing leaves the device — the frame is cropped locally and never uploaded.
383
407
  - The QA overlay is hidden for the captured frame, so the scrim, the selection
384
408
  outline and the annotation card never appear in the image.
385
- - **Chromium desktop only** (Chrome, Edge, Brave, Opera), because it depends
386
- on `preferCurrentTab`. Elsewhere the picker would let a tester share a
387
- screen or another window, whose pixels have nothing to do with our
388
- coordinate space so the option isn't offered, and if a shared surface
389
- somehow isn't this tab (wrong `displaySurface`, or a frame whose aspect
390
- ratio doesn't match the viewport), Qapture falls back to `dom` rather than
391
- returning a confidently wrong image.
409
+ - **Chromium** shares this tab directly (`preferCurrentTab`), so the frame *is*
410
+ the viewport measured at 0.0px error.
411
+ - **Safari and Firefox** have no tab capture, only a window or a screen. That
412
+ frame does contain the page, and Qapture finds it by *measuring*: it covers
413
+ the page with an opaque card carrying four known colours at four known
414
+ corners, photographs that, and solves for scale and origin from where the
415
+ colours landed. Toolbar height, pixel ratio and monitor layout all cancel
416
+ out. You see a dark flash for a fifth of a second. Two corners solve and the
417
+ other two verify — and a calibration that cannot be verified is **refused**,
418
+ falling back to `dom` rather than returning a confidently wrong image.
419
+ - The still belongs to the viewport it was taken in. Resize the window
420
+ mid-capture and the crop is refused for the same reason.
421
+ - Off-screen pixels do not exist in a photograph at any price, so a selection
422
+ that runs past the fold is trimmed to what was visible. The `dom` engine
423
+ re-renders and has no such limit.
392
424
 
393
425
  ---
394
426
 
@@ -828,7 +860,7 @@ The **capture hotkey** (default: `Shift+Alt+C`, i.e. `Option+Shift+C` on macOS)
828
860
  |---|---|---|---|
829
861
  | Capture, notes, export | ✅ | ✅ | ✅ |
830
862
  | `dom` screenshots (default) | ✅ | ✅ | ✅ |
831
- | Pixel-exact screenshots | ✅ opt-in | | — |
863
+ | Pixel-exact screenshots | ✅ opt-in (shares this tab) | opt-in (shares a window, located by measurement) | — |
832
864
  | Save to a folder, live | ✅ opt-in | — | — |
833
865
  | Save to a folder, as a zip | ✅ | ✅ | ✅ |
834
866
  | Storage meter | ✅ | ✅ (Safari reports coarse numbers) | ✅ |