cbd0178cda
The rail gains an HSL tab between FX and FRAME, and the tab opens the mixer ported from the web studio: eight hue bands, each with hue/sat/lum knobs on a -10..+10 ruler, plus three whole-image moves behind an IMAGE divider. Band weights are linear tents anchored on HSL_BANDS and summing to 1 at every hue, so neighbouring bands hand over at exactly half strength and no hue falls in a gap. Pixels under 8% saturation are gated out of the weights (rgb2hsl calls a neutral red, so an ungated one would ride the RED band), while the whole-image LUM move is added after the gate and still lifts a picture that -SAT has pulled to grey. The mixer runs last in TONE_SKSL, so a band edit is judged on the colour the user actually sampled. The eyedropper is library-only: PICK arms a layer over the picture, a tap reads the rendered pixel off the canvas, points the ruler at the nearest band and hangs a panel carrying that band's three knobs. A live preview has no pixel to read, so in camera mode the chip greys out - the mixer itself still runs there, which is why the camera worklet's tone buffer had to grow from 10 slots to 40: a missed slot would have pushed NaN into every uniform and taken the whole tone pass down, not just HSL. HSL is a LITE feature (the web studio builds it for guests too), and MONOCHROME switches the mixer off outright - a mono stock has no hue to select. Checked on a Xiaomi thor against an 8-band chart: +10 whole-image HUE rotates all eight bands by +30 deg, -10 on one band's SAT flattens that band and leaves the other seven alone, and a whole-image -SAT drops the camera preview's mean chroma 13.7 -> 0.4 with +LUM still lifting it 116 -> 166. Cut as 1.2.4 / versionCode 6.
67 lines
1.6 KiB
JSON
67 lines
1.6 KiB
JSON
{
|
|
"expo": {
|
|
"name": "RecipesCam",
|
|
"slug": "recipescamera",
|
|
"version": "1.2.4",
|
|
"orientation": "portrait",
|
|
"icon": "./RecipesCamIcon.png",
|
|
"userInterfaceStyle": "light",
|
|
"ios": {
|
|
"supportsTablet": true,
|
|
"infoPlist": {
|
|
"NSCameraUsageDescription": "Allow RecipesCam to access your camera."
|
|
}
|
|
},
|
|
"android": {
|
|
"adaptiveIcon": {
|
|
"backgroundColor": "#E6F4FE",
|
|
"foregroundImage": "./RecipesCamIcon.png",
|
|
"backgroundImage": "./assets/android-icon-background.png",
|
|
"monochromeImage": "./assets/android-icon-monochrome.png"
|
|
},
|
|
"predictiveBackGestureEnabled": false,
|
|
"permissions": [
|
|
"android.permission.CAMERA",
|
|
"android.permission.ACCESS_COARSE_LOCATION",
|
|
"android.permission.ACCESS_FINE_LOCATION",
|
|
"android.permission.READ_EXTERNAL_STORAGE",
|
|
"android.permission.WRITE_EXTERNAL_STORAGE",
|
|
"android.permission.READ_MEDIA_VISUAL_USER_SELECTED",
|
|
"android.permission.READ_MEDIA_IMAGES"
|
|
],
|
|
"package": "com.locphamtran.recipescamera"
|
|
},
|
|
"web": {
|
|
"favicon": "./assets/favicon.png"
|
|
},
|
|
"plugins": [
|
|
"expo-asset",
|
|
[
|
|
"expo-location",
|
|
{
|
|
"locationAlwaysAndWhenInUsePermission": "Allow RecipesCam to geotag your photos with location watermark."
|
|
}
|
|
],
|
|
[
|
|
"expo-media-library",
|
|
{
|
|
"photosPermission": "Allow RecipesCam to save processed photos to your library.",
|
|
"isAccessMediaLocationEnabled": true
|
|
}
|
|
],
|
|
[
|
|
"expo-camera",
|
|
{
|
|
"cameraPermission": "Allow RecipesCam to scan a recipe QR code."
|
|
}
|
|
],
|
|
"expo-sharing"
|
|
],
|
|
"extra": {
|
|
"eas": {
|
|
"projectId": "31b3c7c4-c00c-447d-aa77-a087f78480ef"
|
|
}
|
|
}
|
|
}
|
|
}
|