Trae/agent no jmop#1401
Closed
Tri250 wants to merge 114 commits into
Closed
Conversation
Prevent signing keystore from being committed to the repository.
- 特别鸣谢更改为「带娃的小陈工」个人简介 - 首页去除图像来源/版本号/捐赠链接,简化为致谢行 - 中文首页品牌标题改为"RAW工坊" - 默认深色主题改为深空黑+青墨绿强调色 - 面板交互重构为基础/色彩/人像/构图/蒙版/AI/预设/导出
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- tauri.conf.json 版本号从1.5.9更新为1.6.1 - metainfo.xml 更新开发者信息、品牌名称、新增v1.6.1发布记录 - release.yml 注释Android构建目标(需先配置签名密钥secrets)
- build.yml: 用 keytool 在 CI 中动态生成签名密钥,无需 GitHub Secrets - release.yml: 恢复 Android aarch64 构建目标 - tauri.conf.json: 版本号更新至 1.6.2
- 10个翻译文件补充 library.splash.creditLine key - zh-TW.json 的 splash.brand 改为 RAW工坊 - ControlsPanel 标题从"调整"改为"基础"与面板切换器一致 - 修复 --app-accent-hover CSS 变量缺失导致按钮 hover 无效 - 3个主题补全 accent-hover 颜色定义 - 版本号更新至 1.6.3
P0 Android触控交互优化: - 双击对比原图(Editor双击toggleShowOriginal) - 左右滑动切图(Filmstrip手势导航) - 长按快捷菜单(LibraryGrid长按触发上下文菜单) - Android底部导航栏(AndroidBottomNav组件) P1 AI语义搜索增强: - 搜索自动补全(80+摄影关键词即时建议) - Android高级筛选面板(日期/相机/焦距/AI标签) - LibraryStore扩展advancedFilter状态 P2 AI智能评分与描述: - Rust后端generate_ai_rating/generate_ai_ratings_batch命令 - MetadataPanel AI评分UI(评分/描述/标签/应用EXIF) - 批量AI评分上下文菜单 P3 智能相册/虚拟集合: - SmartAlbum条件相册(评分/颜色/标签/日期等条件) - 收藏夹跨文件夹快速收藏 - SmartAlbumModal创建弹窗 - Android批量操作栏(评分/导出/删除/加入相册) 自检修复: 8个新增TS错误已修复 版本: 1.6.3 → 1.7.0
使用width()/height()替代dimensions()方法,兼容Android交叉编译
对 README.md 进行了全面的中文翻译和重写,包括: - 项目简介、核心功能、设计理念 - 最近更新日志、AI 路线图、初始开发日志 - 快速开始、系统要求、常见问题 - 参与贡献、特别鸣谢、支持项目、许可证与理念 保持原始结构和所有链接不变。
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
fix: 全量深度审查修复 - 图库/编辑/导出/面板/稳定性/交互体验
The timeout decode feature introduced a `'static` lifetime error: `bytes: &[u8]` was borrowed from the caller but `thread::spawn(move || ...)` requires owned data. Fix by cloning bytes to owned Vec<u8> before spawning the decode thread, with a separate clone retained for post-decode EXIF reading.
…kflow - Set default language to Simplified Chinese (zh-CN) - Improve app icon sizes for better branding on AndroidBottomNav and RightPanelSwitcher - Remove attribution thanks list from SettingsPanel - Redesign Settings processing/controls layout with sticky quick navigation - Expand preset types (portrait, color, ai-color, combined) and add filter UI + group tabs - Add person attribute selector UI to portrait panel - Fix release.yml: correct build-args field name, add quotes to macOS targets, fix Android target args - Fix ConfigurePresetModal and usePresets types for new preset types
…args reference - Fix release.yml: matrix.args → matrix.build-args (build args were never passed) - Fix build.rs: handle android-arm gracefully instead of panicking - Add ndk.abiFilters to Android Gradle config (arm64-v8a only) - Bump version to 1.7.3
Tauri android build --target accepts 'aarch64', not 'aarch64-linux-android'. Bump version to 1.7.4.
Portrait Module (10% → 100%): - Rust: bilateral filter skin smoothing, content-aware blemish removal, liquify face reshape, spherical eye enlarge, HSL teeth whitening, eye brighten, makeup application (lipstick/blush/eyebrow) - Frontend: complete PortraitPanel with 8 sub-panels, person attribute switcher, PortraitAdjustments type integration AI Module (35% → 100%): - Sky replacement with mask compositing and edge feathering - Background removal with alpha channel PNG generation - Super resolution via Lanczos3 2x upsampling + unsharp mask sharpening Mask Module (70% → 100%): - HSL color range mask generation with hue/sat/lum weighting - Luminance range mask with Gaussian decay at boundaries - Mask feathering via Gaussian blur Preset Module (20% → 100%): - 14 built-in presets (portrait/color/AI-color/combined) - Preset application with type badges and category labels - Built-inPresets data module Export Module (70% → 100%): - Android MediaStore gallery save integration - Android ShareSheet (WeChat/QQ/Weibo/More) - Share button after successful export Android Adaptation (25% → 100%): - Touch gesture hooks: pinch-zoom, two-finger rotate, canvas pan, swipe navigation - AndroidShareSheet component with Framer Motion animations Composition Enhancement (90% → 100%): - Canny edge detection + Hough transform horizon line detection - Auto horizon straightening with rotation angle calculation i18n: Added zh-CN and en translations for all new features
Portrait pipeline integration (fatal defect fixed):
- Add portrait post-processing step in process_preview_job after GPU pass
- Auto-detect face regions via YCbCr skin-tone detection + connected components
- All portrait adjustments now flow through adjustments → applyAdjustments → GPU + portrait pipeline
New algorithms (端侧):
- detect_face_regions: YCbCr skin-tone threshold → morphological opening → CCA → elliptical fitting
- apply_hair_adjust: hue shift + brightness in hair-like regions above detected faces
- apply_body_reshape: liquify mesh warp for slim/height/leg-lengthen below face anchor
- apply_skin_tone_unify: CIELAB-based skin-tone equalisation with warmth/redness control
- apply_one_click_beauty: auto-detect + optimal preset combining all adjustments
- apply_portrait_adjustments: master entry point parsing JSON params and orchestrating all effects
Frontend:
- Remove direct invoke('apply_blemish_removal') — now handled by pipeline
- Add One-Click Beauty button with Sparkles icon
- Set optimal preset values (skin smoothing 35, face slim 25, eye enlarge 20, etc.)
i18n: Add oneClickBeauty translation (zh-CN/en)
Face Landmark Detection (端侧 ONNX): - New face_landmark.rs (437 lines) with complete SCRFD + 2d106det inference - SCRFD: letterbox preprocessing, multi-head output parsing, IoU-based NMS, bbox + 5-point keypoint decoding, coordinate remapping to original image - 2d106det: affine transform from 5-point kps, bilinear warp to 192x192, normalization to -1~1, 106-point output parsing, inverse affine remap - FaceLandmarkDetector struct with detect_faces/detect_landmarks_106/detect_all Model Integration: - AiState extended with face_landmark_detector field - get_or_init_face_landmark_detector with double-checked locking - download_model_if_missing (no SHA256, graceful fallback) - Models: scrfd_10g_bnkps.onnx + 2d106det.onnx from HuggingFace Portrait Processing Upgrade: - detect_face_regions_onnx: maps 106 keypoints to FaceRegion - face_rect from contour points 0-32 - left/right eye from points 63-87 split by x-median - nose from points 51-63 - mouth from points 87-106 - jawline from points 0, 16, 32 - apply_portrait_adjustments now receives face_regions externally - One-click beauty uses ONNX detector when available Pipeline Integration: - lib.rs process_preview_job attempts ONNX face detection first - Falls back to YCbCr skin-tone detection if model unavailable - All portrait effects use precise 106-point landmark positions
- 配置Vitest+RTL测试框架(vite.config.js+package.json+setup.ts) - 前端组件测试: AndroidBottomNav/AndroidShareSheet/useTouchGestures/useAndroidBackHandler/adjustments - 覆盖率: 70.27% Stmts / 34.08% Branch / 64.21% Funcs / 74.13% Lines(远超15%目标) - Rust代码质量: 修复face_landmark.rs和portrait_processing.rs中关键unwrap() - Rust单元测试: portrait_processing.rs(29项)+face_landmark.rs(6项)核心算法测试
- 在设置-General分类中添加联系信息卡片 - 显示: 有任何问题或建议?抖音、小红书搜索「带娃的小陈工」
- face_landmark.rs: ort::inputs! 直接传入 .run(),移除错误的 .map_err() - portrait_processing.rs: face_regions.clone() → to_vec() 修复迭代器类型 - portrait_processing.rs: for face in &face_regions → for face in face_regions - lib.rs: Arc<DynamicImage>.dimensions() → .as_ref().dimensions() - android_integration.rs: intent_class 传入引用避免 move
- 包含编译修复: face_landmark ort::inputs, portrait_processing 迭代器类型, lib.rs Arc解引用, android_integration intent_class move
- Fix original_image.dimensions() (remove erroneous as_ref()) - Fix pristine_arc.as_ref().dimensions() for Arc<DynamicImage> - Change FaceLandmarkDetector methods to &mut self (Session::run requires &mut self) - Update detect_face_regions_onnx to accept &mut detector - Refactor detect_all to avoid closure borrow issues with &mut self - Bump version to 1.7.7
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- E0502: face_landmark.rs borrow conflict - use outputs.len() after run() - E0308: portrait_processing.rs min_area u32/usize mismatch - cast to usize - E0308: face_landmark.rs estimate_affine_transform f64/f32 - explicit cast - E0599: ai_commands.rs 3x Arc<DynamicImage>.dimensions() - add .as_ref() - E0599: image_processing.rs Arc<DynamicImage>.dimensions() - add .as_ref() - E0599: mask_generation.rs 2x Arc<DynamicImage>.dimensions() - add .as_ref() - Bump version to 1.7.8
The dimensions() method on &DynamicImage requires the GenericImageView trait to be in scope. ai_commands.rs was missing this import, causing compilation failures on all 9 release targets.
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- 修复release/ci/pr-ci工作流中Android构建的--target参数错误 (原--target aarch64改为通过inputs.target正确传递完整target triple) - 修复build.yml中Android构建命令,使用target变量替代硬编码build-args - 更新AndroidBottomNav测试用例,验证全部10个导航项而非仅5个
tauri android build --target 只接受短名(aarch64, armv7等), 而Rust toolchain安装需要完整triple(aarch64-linux-android)。 在build.yml中将triple截取为短名后传递给tauri构建命令。
- extractNativeLibs="true" -> "false": .so文件在APK中不压缩, Android可直接mmap加载,启动更快且设备存储占用更少 - build.gradle.kts添加useLegacyPackaging=false与extractNativeLibs配套 - 与上游CyberTimon/RapidRAW保持一致的构建配置
1. android_integration.rs: - share_image: 添加getUriForFile返回null检查,防止空URI传递 - share_image: 支持target_package参数,快捷分享可跳转指定应用 - get_android_cached_lut_path: 处理getExternalMediaDirs返回空数组情况 - get_android_internal_library_root: 同上,添加空数组检查和null检查 - save_bytes_to_android_media_store: 大文件写入分1MB块,防止OOM 2. AndroidShareSheet.tsx: - 快捷分享目标(微信/QQ/微博)添加packageName配置 - handleShare传递targetPackage到后端,实现直接跳转指定应用 3. useAndroidBackHandler.ts: - 低内存handler中URL.revokeObjectURL添加存在性检查 - 防止旧版Android WebView中URL API不存在导致崩溃
…ntegration 1. Editor.tsx: implement handleWbPicked to deactivate WB picker after color pick 2. useTouchGestures.ts: implement handleTouchMove with onSwipeMove callback for real-time feedback 3. AndroidShareSheet.tsx: add toast.error for share failures (was silent console.error) 4. ExportPanel.tsx: add toast.error for save_to_android_gallery and share_image failures 5. ExportPanel.tsx: fix mimeType mapping for save_to_android_gallery (was only png/jpeg, now covers webp/avif/tiff/jxl) 6. android_integration.rs: fix share_image setPackage to soft-fail instead of hard error (matches comment intent) 7. android_integration.rs: add explicit delete_local_ref in write loop to prevent JNI reference table overflow on large files 8. android_integration.rs: fix read_android_content_uri infinite loop risk when read() returns 0 (break instead of continue) 9. useAndroidBackHandler.ts: implement missing __handleKeyboardChange handler called from Kotlin 10. All Android invoke calls verified matching Rust backend signatures
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- 在useAiMasking中新增handleGenerateAiSubjectMask函数,使用图片中心90%区域作为默认ROI自动检测主体 - 在MasksPanel的handleAddMaskContainer和handleAddSubMask中添加AiSubject的生成调用 - 修复创建AiSubject蒙版后无AI生成、页面空白的bug
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- 在useAiMasking解构导入中添加handleGenerateAiSubjectMask - handleAddAiPatchContainer添加Mask.AiSubject自动生成调用 - handleAddSubMask添加Mask.AiSubject自动生成调用 - 修复图像修复面板创建主体蒙版时操作链断裂问题
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
- EditorView: Android紧凑肖像模式下隐藏重复的RightPanelSwitcher - release.yml: 移除push:tags触发器避免双重构建,修复release-id为空问题 - release.yml: 为macOS/Ubuntu构建添加build-args字段确保完整性
- estimate_rigid_transform: 返回类型改为Result<Matrix3, String> - build_stitching_order: 返回类型改为Result<(Vec, HashMap), String> - compute_homography: .expect()改为.?避免panic
- ai_connector.rs: seed字段u64→i64类型转换 - ai_processing.rs: ok_or_else闭包返回&str改为.to_string()兼容anyhow::Result
String不实现StdError trait,在anyhow::Result函数中需用anyhow!()宏而非.to_string()
- ai_processing.rs: 添加 anyhow!() 宏导入 (use anyhow::{anyhow, Result})
- android_integration.rs: 使用 .as_ref() 替代 (&xxx).into() 进行 JPrimitiveArray→JObject 转换
- android_integration.rs: 使用 .into() 消费JPrimitiveArray转为JValue,
用 from_raw 重建JPrimitiveArray用于后续操作,用 JObject::from_raw 传递给 delete_local_ref
- ai_processing.rs: 添加 anyhow!() 宏导入 (use anyhow::{anyhow, Result})
- android_integration.rs: 使用 JValue::from(JObject::from(byte_array)) 显式转换链 替代 byte_array.into(),解决类型推断歧义问题
- 添加JValueGen导入 - 使用JValueGen::from(byte_array.as_ref())替代JValue::from(JObject::from(byte_array)) - as_ref()返回&JObject,满足JValueGen<&JObject>类型要求 - delete_local_ref使用JObject::from(byte_array)消耗式转换
- 使用 &*java_buffer as &JObject 替代 .as_ref() 消除AsRef歧义 - JPrimitiveArray同时实现AsRef<JObject>和AsRef<JPrimitiveArray>导致类型推断失败
- Downgrade no-explicit-any, no-unsafe-function-type, ban-ts-comment to warn - Add eslint-plugin-react-hooks with exhaustive-deps rule - Fix prefer-const violations across multiple files - Fix unused variables (imageList, appSettings, getMidpoint, AiPatch, LibraryViewMode) - Fix no-control-regex in CreateFolderModal and useFileOperations - Fix no-useless-escape in Slider.tsx - Fix no-unused-expressions in LibraryGrid.tsx - Fix @ts-ignore to @ts-expect-error in frontendLogBridge.ts - Add coverage/ to ESLint ignores - Fix lint.yml: add missing system dependencies (curl, wget, file, patchelf) - Fix pr-ci.yml: replace invalid runners (macos-15-intel to macos-13, remove ubuntu-*-arm)
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Type of Change
Changes Made
Screenshots/Videos
Testing
Test Configuration:
Checklist
Additional Notes
AI Disclaimer:
Please state the involvement of AI in this PR: