Skip to content

🐛 Fix exported crops on images with EXIF orientations - #1831

Merged
gwennlbh merged 11 commits into
mainfrom
fix-exif-orientation2
Jul 2, 2026
Merged

gwennlbh merged 11 commits into
mainfrom
fix-exif-orientation2

Conversation

@gwennlbh

@gwennlbh gwennlbh commented Jul 1, 2026 •

Copy link
Copy Markdown
Member

Fixes #1824
[Thu Jul 2 21:33:32 UTC 2026] Downloading the Android app preview from Diawi:

QR code

https://i.diawi.com/aHjqDV

@gwennlbh
gwennlbh temporarily deployed to 1831: node_modules analysis July 1, 2026 13:24 — with GitHub Actions Inactive
@gwennlbh
gwennlbh marked this pull request as ready for review July 1, 2026 13:51
@gwennlbh
gwennlbh enabled auto-merge July 1, 2026 13:51
@gwennlbh gwennlbh changed the title Fix exif orientation (2nd attempt) 🐛 Ignore EXIF orientation Jul 1, 2026
@gwennlbh gwennlbh changed the title 🐛 Ignore EXIF orientation 🐛 Fix exported crops on images with EXIF orientations Jul 1, 2026
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 1, 2026 13:53 — with GitHub Actions Inactive
@gwennlbh
gwennlbh force-pushed the fix-exif-orientation2 branch from a38da9a to 303a4f0 Compare July 1, 2026 13:54
@gwennlbh
gwennlbh temporarily deployed to 1831: node_modules analysis July 1, 2026 13:56 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 1, 2026 13:56 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Android problems report July 1, 2026 14:01 — with GitHub Actions Inactive
@gwennlbh
gwennlbh force-pushed the fix-exif-orientation2 branch from 303a4f0 to 44d96c0 Compare July 1, 2026 14:03
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 1, 2026 14:05 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Android problems report July 1, 2026 14:10 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: node_modules analysis July 1, 2026 14:14 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 1, 2026 14:49 — with GitHub Actions Inactive
@gwennlbh
gwennlbh force-pushed the fix-exif-orientation2 branch from 4c146e8 to 3cd5539 Compare July 1, 2026 14:52
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 1, 2026 14:54 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Coverage July 1, 2026 14:58 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Unit tests July 1, 2026 14:58 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: node_modules analysis July 1, 2026 14:59 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 1, 2026 •

Copy link
Copy Markdown
Contributor

✅ Coverage is up by 0.12% (from 55.66% to 55.78%)

@github-actions

github-actions Bot commented Jul 1, 2026 •

Copy link
Copy Markdown
Contributor

Bundle Stats

Hey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle.

As this PR is updated, I'll keep you updated on how the bundle size is impacted.

Total

Files count Total bundle size % Changed
274 48.27 MB → 48.41 MB (+136.83 kB)
12.27 MB → 12.32 MB (gzip)
+0.28%
Changeset (largest 100 files by percent change)
File Δ Size
exiffields.ts 🆕 +97.16 kB 0 B → 97.16 kB
generated/conversions.js 🆕 +25.55 kB 0 B → 25.55 kB
object-inspect/index.js 🆕 +8.81 kB 0 B → 8.81 kB
get-intrinsic/index.js 🆕 +7.89 kB 0 B → 7.89 kB
index.esm.js 🆕 +5.17 kB 0 B → 5.17 kB
idb/build/index.js 🆕 +3.31 kB 0 B → 3.31 kB
FromBase64.js 🆕 +2.18 kB 0 B → 2.18 kB
tinykeys.mjs 🆕 +1.99 kB 0 B → 1.99 kB
routes/(app)/(sidepanel)/import/+page.svelte 🆕 +1.57 kB 0 B → 1.57 kB
(sidepanel)/crop/+page.svelte 🆕 +1.53 kB 0 B → 1.53 kB
exif.ts 🆕 +1.52 kB 0 B → 1.52 kB
SetValueInBuffer.js 🆕 +1.34 kB 0 B → 1.34 kB
is-callable/index.js 🆕 +1.3 kB 0 B → 1.3 kB
GetValueFromBuffer.js 🆕 +1.26 kB 0 B → 1.26 kB
define-data-property/index.js 🆕 +1.26 kB 0 B → 1.26 kB
DecodeBase64Chunk.js 🆕 +1.09 kB 0 B → 1.09 kB
which-typed-array/index.js 🆕 +924 B 0 B → 924 B
es2015.js 🆕 +894 B 0 B → 894 B
shams.js 🆕 +822 B 0 B → 822 B
RawBytesToNumeric.js 🆕 +802 B 0 B → 802 B
side-channel-weakmap/index.js 🆕 +773 B 0 B → 773 B
esm/index.js 🆕 +763 B 0 B → 763 B
FromHex.js 🆕 +757 B 0 B → 757 B
NumericToRawBytes.js 🆕 +728 B 0 B → 728 B
side-channel-list/index.js 🆕 +676 B 0 B → 676 B
ToBigInt.js 🆕 +650 B 0 B → 650 B
typed-array-objects.js 🆕 +622 B 0 B → 622 B
typed-array-byte-offset/index.js 🆕 +619 B 0 B → 619 B
valueToFloat64Bytes.js 🆕 +607 B 0 B → 607 B
for-each/index.js 🆕 +602 B 0 B → 602 B
typed-array-length/index.js 🆕 +601 B 0 B → 601 B
StringPad.js 🆕 +597 B 0 B → 597 B
OrdinaryObjectCreate.js 🆕 +575 B 0 B → 575 B
define-properties/index.js 🆕 +551 B 0 B → 551 B
side-channel-map/index.js 🆕 +524 B 0 B → 524 B
valueToFloat32Bytes.js 🆕 +496 B 0 B → 496 B
is-regex/index.js 🆕 +496 B 0 B → 496 B
Overlay/Overlay.svelte 🆕 +496 B 0 B → 496 B
set-function-length/index.js 🆕 +475 B 0 B → 475 B
ArrayBufferByteLength.js 🆕 +451 B 0 B → 451 B
StringToNumber.js 🆕 +445 B 0 B → 445 B
functions-have-names/index.js 🆕 +415 B 0 B → 415 B
is-weakmap/index.js 🆕 +413 B 0 B → 413 B
zip.ts 🆕 +409 B 0 B → 409 B
valueToFloat16Bytes.js 🆕 +404 B 0 B → 404 B
is-set/index.js 🆕 +389 B 0 B → 389 B
is-map/index.js 🆕 +389 B 0 B → 389 B
is-symbol/index.js 🆕 +387 B 0 B → 387 B
GetUint8ArrayBytes.js 🆕 +382 B 0 B → 382 B
SkipAsciiWhitespace.js 🆕 +365 B 0 B → 365 B
IsDetachedBuffer.js 🆕 +358 B 0 B → 358 B
is-document.all/index.js 🆕 +357 B 0 B → 357 B
is-array-buffer/index.js 🆕 +355 B 0 B → 355 B
is-async-function/index.js 🆕 +348 B 0 B → 348 B
dunder-proto/get.js 🆕 +346 B 0 B → 346 B
MakeTypedArrayWithBufferWitnessRecord.js 🆕 +344 B 0 B → 344 B
side-channel/index.js 🆕 +340 B 0 B → 340 B
bytesAsFloat64.js 🆕 +334 B 0 B → 334 B
is-generator-function/index.js 🆕 +327 B 0 B → 327 B
is-bigint/index.js 🆕 +322 B 0 B → 322 B
ToNumber.js 🆕 +316 B 0 B → 316 B
IsFixedLengthArrayBuffer.js 🆕 +314 B 0 B → 314 B
alphabetFromIdentifier.js 🆕 +311 B 0 B → 311 B
implementation.js 🆕 +310 B 0 B → 310 B
is-weakset/index.js 🆕 +302 B 0 B → 302 B
typed-array-with-buffer-witness-record.js 🆕 +289 B 0 B → 289 B
substring.js 🆕 +287 B 0 B → 287 B
toString.js 🆕 +283 B 0 B → 283 B
TypedArrayElementSize.js 🆕 +272 B 0 B → 272 B
is-boolean-object/index.js 🆕 +269 B 0 B → 269 B
is-number-object/index.js 🆕 +266 B 0 B → 266 B
is-string/index.js 🆕 +265 B 0 B → 265 B
remainder.js 🆕 +263 B 0 B → 263 B
bytesAsFloat32.js 🆕 +261 B 0 B → 261 B
which-boxed-primitive/index.js 🆕 +260 B 0 B → 260 B
clamp.js 🆕 +255 B 0 B → 255 B
isArguments.js 🆕 +254 B 0 B → 254 B
bytesAsFloat16.js 🆕 +241 B 0 B → 241 B
StringToBigInt.js 🆕 +239 B 0 B → 239 B
is-date-object/index.js 🆕 +238 B 0 B → 238 B
GetMethod.js 🆕 +236 B 0 B → 236 B
Get.js 🆕 +226 B 0 B → 226 B
HasOwnProperty.js 🆕 +220 B 0 B → 220 B
defaultEndianness.js 🆕 +214 B 0 B → 214 B
bytesAsInteger.js 🆕 +213 B 0 B → 213 B
possible-typed-array-names/index.js 🆕 +206 B 0 B → 206 B
ToBigInt64.js 🆕 +203 B 0 B → 203 B
integerToNBytes.js 🆕 +200 B 0 B → 200 B
makeFakeGlobal.js 🆕 +200 B 0 B → 200 B
call-bind/index.js 🆕 +199 B 0 B → 199 B
is-finalizationregistry/index.js 🆕 +198 B 0 B → 198 B
fractionToBinaryString.js 🆕 +196 B 0 B → 196 B
which-collection/index.js 🆕 +195 B 0 B → 195 B
truncate.js 🆕 +191 B 0 B → 191 B
is-weakref/index.js 🆕 +191 B 0 B → 191 B
is-shared-array-buffer/index.js 🆕 +189 B 0 B → 189 B
has-property-descriptors/index.js 🆕 +183 B 0 B → 183 B
safe-regex-test/index.js 🆕 +182 B 0 B → 182 B
ToInt32.js 🆕 +180 B 0 B → 180 B
available-typed-arrays/index.js 🆕 +180 B 0 B → 180 B
View detailed bundle breakdown

Added

Asset File Size % Changed
_app/immutable/chunks/B29rwfxF.js 0 B → 824.57 kB (+824.57 kB)
0 B → 254.84 kB (gzip)
-
_app/immutable/chunks/tDNmGCIP.js 0 B → 148.48 kB (+148.48 kB)
0 B → 64.27 kB (gzip)
-
_app/immutable/chunks/C4BY6QAa.js 0 B → 124.38 kB (+124.38 kB)
0 B → 49.56 kB (gzip)
-
_app/immutable/chunks/B0C3TRpP.js 0 B → 115.7 kB (+115.7 kB)
0 B → 51.65 kB (gzip)
-
_app/immutable/nodes/2.C6n4w5AD.js 0 B → 115.35 kB (+115.35 kB)
0 B → 62 kB (gzip)
-
_app/immutable/nodes/16.jZDu-zqp.js 0 B → 2.81 kB (+2.81 kB)
0 B → 1.52 kB (gzip)
-
_app/immutable/nodes/24.CgmTDJxb.js 0 B → 2.6 kB (+2.6 kB)
0 B → 1.44 kB (gzip)
-
_app/immutable/nodes/0.1FQGRaAO.js 0 B 0%
_app/immutable/nodes/4.C3xhoECe.js 0 B 0%

Removed

Asset File Size % Changed
_app/immutable/chunks/BqVgB__V.js 735.63 kB → 0 B (-735.63 kB)
236.09 kB → 0 B (gzip)
-100%
_app/immutable/chunks/B65wJXcv.js 148.48 kB → 0 B (-148.48 kB)
64.27 kB → 0 B (gzip)
-100%
_app/immutable/chunks/BnhHm-cy.js 123.23 kB → 0 B (-123.23 kB)
49.09 kB → 0 B (gzip)
-100%
_app/immutable/chunks/DkgIS-QM.js 115.48 kB → 0 B (-115.48 kB)
51.56 kB → 0 B (gzip)
-100%
_app/immutable/nodes/2.otBJV0xK.js 37.43 kB → 0 B (-37.43 kB)
15.55 kB → 0 B (gzip)
-100%
_app/immutable/nodes/16.CNUDcbZp.js 2.81 kB → 0 B (-2.81 kB)
1.52 kB → 0 B (gzip)
-100%
_app/immutable/nodes/24.FFqScd-x.js 2.6 kB → 0 B (-2.6 kB)
1.44 kB → 0 B (gzip)
-100%
_app/immutable/nodes/0.BsAxNPBH.js 0 B 0%
_app/immutable/nodes/4.Dk9-BuCc.js 0 B 0%

Bigger

Asset File Size % Changed
_app/immutable/workers/start-[hash].js 1.93 MB → 2.02 MB (+90.18 kB)
662.94 kB → 682.2 kB (gzip)
+4.56%
_app/immutable/chunks/JS0qvPi4.js 29.55 kB → 29.7 kB (+162 B)
13.37 kB → 13.43 kB (gzip)
+0.54%
_app/immutable/chunks/Bbc-reX-2.js 20.76 kB → 20.87 kB (+110 B)
7.46 kB → 7.51 kB (gzip)
+0.52%
_app/immutable/chunks/BjrIQj4c2.js 18.4 kB → 18.5 kB (+110 B)
7.27 kB → 7.33 kB (gzip)
+0.58%
_app/immutable/chunks/wj04iIOt2.js 5.49 kB → 5.54 kB (+44 B)
1.96 kB → 1.97 kB (gzip)
+0.78%
_app/immutable/nodes/10.BU4-VRJU.js 3.09 kB → 3.09 kB (+1 B)
1.64 kB → 1.64 kB (gzip)
+0.03%
_app/immutable/nodes/38.BJpRfw9a.js 12.29 kB → 12.29 kB (+1 B)
4.26 kB → 4.26 kB (gzip)
+0.01%
app/immutable/chunks/CjrdPml.js 25.76 kB → 25.76 kB (+1 B)
10.19 kB → 10.19 kB (gzip)
+0.00%

Smaller

Asset File Size % Changed
_app/immutable/workers/assets/libraw-[hash].wasm 1.31 MB → 1.2 MB (-114.56 kB)
467.39 kB → 431.21 kB (gzip)
-8.53%
_app/immutable/workers/libraw-[hash].js 69.24 kB → 65.52 kB (-3.71 kB)
24.05 kB → 22.76 kB (gzip)
-5.36%
_app/immutable/workers/worker-[hash].js 69.65 kB → 65.95 kB (-3.69 kB)
24.22 kB → 22.94 kB (gzip)
-5.30%
_app/immutable/nodes/17.DAIW6glY.js 29.5 kB → 29.49 kB (-5 B)
10.73 kB → 10.74 kB (gzip)
-0.02%
_app/immutable/chunks/AmLrQlQh2.js 979.09 kB → 979.09 kB (-4 B)
274.35 kB → 274.34 kB (gzip)
-0.00%
_app/immutable/nodes/39.CB2OIfud.js 12.49 kB → 12.49 kB (-1 B)
5.1 kB → 5.1 kB (gzip)
-0.01%
_app/immutable/chunks/BwemisK82.js 48.74 kB → 48.74 kB (-1 B)
19.45 kB → 19.45 kB (gzip)
-0.00%
_app/immutable/chunks/CdFvo7WZ.js 3.29 kB → 3.29 kB (-1 B)
1.4 kB → 1.4 kB (gzip)
-0.03%
_app/immutable/chunks/CvlCUDMm.js 23.66 kB → 23.66 kB (-1 B)
10.33 kB → 10.33 kB (gzip)
-0.00%
_app/immutable/chunks/L0Sn99VG.js 12.73 kB → 12.73 kB (-1 B)
5.23 kB → 5.23 kB (gzip)
-0.01%

@gwennlbh
gwennlbh temporarily deployed to 1831: E2E tests July 1, 2026 15:20 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 1, 2026 •

Copy link
Copy Markdown
Contributor

Performance changes with main

Browser Test Metric Head Base Change
webkit startup @blank Total 9 153,4 ms 9 302,2 ms
startup Total 8 630,2 ms 8 801,4 ms
chromium startup @blank DOM 685,1 668,34
Load 685,38 668,56
Bytes 8 849 752 8 653 150
LCP 14 242,4 14 055,2
TBT 2 635 2 556
CLS 0,15 0,14 🔺+11,44
Total 14 428,2 ms 14 229,6 ms
startup DOM 441,28 485,34
Load 441,52 485,64
Bytes 19 963 939 19 754 219
LCP 6 931,2 6 478,4
TBT 1 942,4 1 673,6 🔺+16,06
CLS 0,13 0,13
Total 7 108 ms 6 655,6 ms

Total: total, DOM: domCompleteTiming, Load: pageloadTiming, Bytes: totalBytes, LCP: largestContentfulPaint, TBT: totalBlockingTime, CLS: cumulativeLayoutShift,

@gwennlbh
gwennlbh temporarily deployed to 1831: Android problems report July 2, 2026 11:38 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Bundle analyzer July 2, 2026 11:44 — with GitHub Actions Inactive
@gwennlbh
gwennlbh disabled auto-merge July 2, 2026 11:44
@gwennlbh
gwennlbh temporarily deployed to 1831: E2E tests July 2, 2026 12:02 — with GitHub Actions Inactive
@gwennlbh
gwennlbh force-pushed the fix-exif-orientation2 branch from ac61174 to 4e65582 Compare July 2, 2026 15:11
@gwennlbh
gwennlbh temporarily deployed to 1831: node_modules analysis July 2, 2026 15:12 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 2, 2026 15:13 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Unit tests July 2, 2026 15:15 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Coverage July 2, 2026 15:15 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Android problems report July 2, 2026 15:17 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: App preview July 2, 2026 15:21 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Android problems report July 2, 2026 15:27 — with GitHub Actions Inactive
@gwennlbh
gwennlbh temporarily deployed to 1831: Unit tests July 2, 2026 15:28 — with GitHub Actions Inactive
@gwennlbh
gwennlbh had a problem deploying to 1831: node_modules analysis July 2, 2026 15:30 — with GitHub Actions Error

This branch was successfully deployed

8 active (5 outdated) deployments
1831: E2E tests — 6565ba27 Deployed Jul 2, 2026 by gwennlbh via E2E / Upload report / Deploy #8411
1831: node_modules analysis — 6565ba27 Deployed Jul 2, 2026 by gwennlbh via report / Deploy #3813
1831: App preview — 6565ba27 Deployed Jul 2, 2026 by gwennlbh via PR Preview / Deploy / Deploy #8411
1831: Bundle analyzer — 810657c5 Deployed Jul 2, 2026 by gwennlbh via Bundle size / Breakdown site / Deploy #8408
1831: Unit tests — 810657c5 Deployed Jul 2, 2026 by gwennlbh via Unit tests / Test report / Deploy #8408
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

crop issue when exporting on photos that have a non-horizontal Orientation EXIF field

1 participant