diff --git a/PLAY_RELEASE_NOTES.md b/PLAY_RELEASE_NOTES.md index 4329a76..a6e6ddb 100644 --- a/PLAY_RELEASE_NOTES.md +++ b/PLAY_RELEASE_NOTES.md @@ -5,7 +5,22 @@ first. Plain text only (the Console renders no markdown), 500 characters max per language — each block below is measured and fits. Paragraphs are one line each so a copy-paste lands in the Console unwrapped. -Release name field: `1.2.6 (8)` +Release name field: `1.2.7 (9)` + +## 1.2.7 (versionCode 9) + +``` +Photos taken in dim light and at high ISO came out much noisier than the preview showed. Every shot was being sharpened in the background by a fixed amount the viewfinder never applied, and it amplified sensor noise about three times over. + +That hidden sharpening is gone, so high-ISO shots now come back as clean as the preview promised. The SHARPENING slider still sharpens exactly as before when you move it above 0. +``` + +419 characters (1.2.7). + +Artifact: `android/app/build/outputs/bundle/liteRelease/app-lite-release.aab` +(appId `com.locphamtran.recipescamera`, versionCode 9, versionName 1.2.7). +The pro APK built from the same commit is `app-pro-release.apk`, versionName +`1.2.7-pro` - it is the paid build handed out directly, not uploaded here. ## 1.2.6 (versionCode 8) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 9f40969..13b7297 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,17 @@ # Release notes +## 1.2.7 (versionCode 9) + +Export +- Every camera capture came out of the exporter through a full-resolution unsharp mask the viewfinder never showed. App.tsx passed `sharpen: true`, and with the SHARPENING knob at its default 0 both engines read that flag as an *amount* of 0.5 - a value that existed only as the boolean's fallback. The 3x3 kernel `[0,-a,0; -a,1+4a,-a; 0,-a,0]` at a=0.5 has a noise gain of 3.167x at low frequency and 5.0x at Nyquist, so a dim, high-ISO frame was pushed back several times noisier than the preview promised. +- The knob is now the only source of output sharpening. The boolean is gone from ExportOptions and NativeExportOptions, the 0.5 fallback is gone with it, and screenSharpenImage no longer carries `amount = 0.5` as a default argument - a second door onto the same value. A knob above 0 sharpens exactly as before, the negative knob still means none, and the Kotlin-side `adjust["sharpen"]` amount is untouched. +- Measured on a Xiaomi thor, 3000x4000 captures in one unchanged scene. At 1x / ISO ~330 the noise sigma drops 4.52 -> 2.35, the dark-quartile sigma 3.21 -> 1.56 and a flat 64px tile 0.599 -> 0.349; at 10x / ISO ~1900 the same three fall 1.22 -> 1.09, 0.75 -> 0.54 and 0.464 -> 0.225. With no edit applied, the JPEGs shrink 26% and 35% - the mask had also been spending a third of every file on amplified noise. +- Stills now match the preview, which always rendered without the mask. + +Notes +- qualityPrioritization was re-tested as the other suspect and cleared: MAXIMIZE_QUALITY ('quality') moved neither noise figure at either ISO, so the shipped 'balanced' capture mode stays. +- Zoom to 10x in the same room is the high-ISO bench for this device: AE picks ISO ~1900-2100 there against ~330 at 1x. + ## 1.2.6 (versionCode 8) Presets diff --git a/android/app/build.gradle b/android/app/build.gradle index 42927f8..3b55dc2 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -92,8 +92,8 @@ android { applicationId 'com.locphamtran.recipescamera' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 8 - versionName "1.2.6" + versionCode 9 + versionName "1.2.7" buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" diff --git a/app.json b/app.json index ab69947..dde3d5f 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "RecipesCam", "slug": "recipescamera", - "version": "1.2.6", + "version": "1.2.7", "orientation": "portrait", "icon": "./RecipesCamIcon.png", "userInterfaceStyle": "light",