Is there an existing issue for this?
What happened?
Description
The Open Original File button in the Image Details panel fails to open images in the system's default viewer. Even though the backend provides the correct absolute path, the frontend action is either silent or blocked by security errors.
How to reproduce
- Launch PictoPy and go to the Home gallery.
- Select an image and click the
Show Info (Info icon) button.
- Click the
Open Original File button at the bottom of the panel.
- Observation: No external application opens, or a
Failed to open file error appears in the console.

Root Cause
- Migration Gap: The code uses
open() from @tauri-apps/plugin-shell, which is deprecated/restricted in Tauri v2 for opening local file system paths.
- Missing Permissions: The Tauri capabilities configuration lacks the explicit
opener:allow-open-path permission.
- Missing Scope: Tauri v2 requires an explicit scope
(**) to authorize the opener plugin to access local file paths.
Potential Fix
- Frontend : Migrate from
plugin-shell to @tauri-apps/plugin-opener and use openPath(currentImage.path)
- Configuration : Update the app's capability file
migrated.json to include the scoped permission:
{
"identifier": "opener:allow-open-path",
"allow": [{ "path": "**" }]
}
Before Screenshot

After Screenshot

Record
Is there an existing issue for this?
What happened?
Description
The
Open Original Filebutton in theImage Detailspanel fails to open images in the system's default viewer. Even though the backend provides the correct absolute path, the frontend action is either silent or blocked by security errors.How to reproduce
Show Info (Info icon) button.Open Original Filebutton at the bottom of the panel.Failed to open fileerror appears in the console.Root Cause
open() from @tauri-apps/plugin-shell, which is deprecated/restricted in Tauri v2 for opening local file system paths.opener:allow-open-pathpermission.(**)to authorize the opener plugin to access local file paths.Potential Fix
plugin-shellto@tauri-apps/plugin-openerand useopenPath(currentImage.path)migrated.jsonto include the scoped permission:{ "identifier": "opener:allow-open-path", "allow": [{ "path": "**" }] }Before Screenshot
After Screenshot
Record