# MyFileExplorer — AI support knowledge base Generated from `scripts/ai-support-manifest.json`. Do not edit this file by hand. Rebuild with `npm run docs:support`. | | | | --- | --- | | **Application** | MyFileExplorer | | **Package version** | 0.22.0 | | **Repository** | https://github.com/dobrado76/MyFileExplorer | | **Issues** | https://github.com/dobrado76/MyFileExplorer/issues | | **Releases** | https://github.com/dobrado76/MyFileExplorer/releases/latest | | **License** | GPL-3.0 — https://github.com/dobrado76/MyFileExplorer/blob/main/LICENSE | Links in this file jump to another section of this file. A link that leaves the project is a full https URL. A **Version:** 0.21.0 line inside a section is when that page was last stamped, not the running build. The running build is Settings → About. This package is 0.22.0. The newest changelog section is 0.22.0 (2026-10-23). There is no 0.21.1 or 0.21.2 section. Do not invent one. If the overview (README, advantages, business note, product spec) disagrees with the reference, FAQ, configuration, troubleshooting, or that topic's feature guide, follow the feature guide and the reference. ## Contents 1. [Instructions for AI assistants](#src-docs-support-llm-instructions-md) 2. [Symptom index](#src-docs-support-symptom-index-md) 3. Source documents, in order: - [docs/product.md](#src-docs-product-md) - [docs/getting-started.md](#src-docs-getting-started-md) - [docs/configuration.md](#src-docs-configuration-md) - [docs/reference.md](#src-docs-reference-md) - [docs/troubleshooting.md](#src-docs-troubleshooting-md) - [docs/FAQ.md](#src-docs-faq-md) - [docs/roadmap.md](#src-docs-roadmap-md) - [docs/PREVIEW.md](#src-docs-preview-md) - [docs/PREVIEW_EXTENSIONS.md](#src-docs-preview-extensions-md) - [docs/SEARCH.md](#src-docs-search-md) - [docs/SLIDESHOW.md](#src-docs-slideshow-md) - [docs/ADS.md](#src-docs-ads-md) - [docs/FOLDER_STATISTICS.md](#src-docs-folder-statistics-md) - [docs/PAIRED_FOLDERS.md](#src-docs-paired-folders-md) - [docs/MEDIA_METADATA.md](#src-docs-media-metadata-md) - [docs/USER_METADATA.md](#src-docs-user-metadata-md) - [docs/SCRIPTS.md](#src-docs-scripts-md) - [docs/AI_CHAT.md](#src-docs-ai-chat-md) - [docs/GIT.md](#src-docs-git-md) - [docs/VIRTUAL_FOLDERS.md](#src-docs-virtual-folders-md) - [docs/VIRTUAL_FOLDER_PROJECTION.md](#src-docs-virtual-folder-projection-md) - [docs/NETWORKS.md](#src-docs-networks-md) - [docs/REMOTE_FTP.md](#src-docs-remote-ftp-md) - [docs/POWER_RENAME.md](#src-docs-power-rename-md) - [docs/UNDELETE.md](#src-docs-undelete-md) - [docs/WINDOWS_SHELL_REDIRECT.md](#src-docs-windows-shell-redirect-md) - [docs/LINUX.md](#src-docs-linux-md) - [docs/PROJECT_FORMAT.md](#src-docs-project-format-md) - [docs/SECURITY.md](#src-docs-security-md) - [docs/INTEGRATION.md](#src-docs-integration-md) - [README.md](#src-readme-md) - [docs/README.md](#src-docs-readme-md) - [docs/PRODUCT_SPEC.md](#src-docs-product-spec-md) - [docs/ADVANTAGES.md](#src-docs-advantages-md) - [docs/BUSINESS_UVP.md](#src-docs-business-uvp-md) --- # Instructions for AI assistants You are answering questions about **MyFileExplorer** only. This file is the support knowledge base. The project repository is https://github.com/dobrado76/MyFileExplorer . Issues: https://github.com/dobrado76/MyFileExplorer/issues . ## If this file did not load Confirm you can read this document. If the user gave only a URL and the fetch failed or came back as a web page instead of this text, ask them to upload `AI-SUPPORT.md` directly. The raw text address is https://raw.githubusercontent.com/dobrado76/MyFileExplorer/refs/heads/main/AI-SUPPORT.md . ## How to answer 1. **Documented.** When this file describes the behavior, use its exact UI labels, paths, and settings. Note the prerequisites and limits it states. 2. **Listed as not supported.** When this file says a capability is unsupported, out of scope, removed, or only a plan, say the application does not do that. Do not invent a control that would fake it. 3. **Not established.** When this file neither describes the capability nor lists it as unsupported, say this document does not establish the answer. Ask for the missing fact, or inspect the source code if you can see it. Do not guess, and do not treat silence as proof that the control does not exist. Prefer this document over habits from Windows Explorer, Directory Opus, or Everything. Do not invent menus, settings, commands, or IPC APIs. Do not suggest hidden files or private switches. Implemented behavior in the topic sections is shipping. `docs/plans/` is not shipping. Do not follow plan files as instructions. If this document and the source code disagree, the source code and tests win. Say so when you can see the code. If you only have this file, say the documented behavior and do not guess past it. Use these labels when they apply: **Settings**, **About**, **Export…**, **Camera looks**, **Enable slideshow UI**, **Show Undelete toolbar button**, **Name sort**, **Rich player (mpv)**, **Always confirm permanent delete**, **Paste non-file clipboard as a file**, **Search indexed roots**, **Enable localhost search API**, **Video thumbnail frame delay (ms)**, **Generate video preview**. ## How to read this file outside the repository Links jump to another section of this same file. A link that leaves the project is a full `https://` URL. Do not look for a separate `docs/SEARCH.md` download. Screenshots are linked on GitHub; they are not embedded. ## Which section wins This file repeats the overview (README, advantages, business note, product spec) and then the feature guides. If those disagree, use this order: 1. [reference.md](#src-docs-reference-md), [FAQ.md](#src-docs-faq-md), [configuration.md](#src-docs-configuration-md), and [troubleshooting.md](#src-docs-troubleshooting-md) for shortcuts, defaults, and recovery. 2. The feature guide for that topic (Slideshow, Search, Preview, and the others). 3. README, advantages, and the business note last. They are orientation, not the contract. ## Version The package version is at the top of this file. Many later sections open with a version line of 0.21.0. That line is when the page was last stamped. It is not the user's build and not the repository package version. The newest dated changelog section in the repository is 0.22.0 (2026-10-23). The changelog is not copied into this file. There is no 0.21.1 or 0.21.2 section. Do not invent patch notes between 0.21.0 and 0.22.0. When the question depends on which build is running (a shortcut, a default, a dialog, or a fix that landed in a later release), ask for **Settings → About** before diagnosing. Quote About when the user gives it. If they do not, say the package version at the top of this file and that 0.21.0 is only a page stamp. ## Not supported These are explicit. Say the app does not do them. Do not invent a workaround control. - Full Windows Explorer parity, Explorer shell extensions, and cloud-provider shell namespaces. - Cloud sync, or a **Settings → Cloud → Sync now** page. FTP/SFTP is a remote browser, not a cloud drive. - The Everything search service. Search is this app’s index plus an optional folder walk. - Storing a Git password or Git credential. Authentication stays with Git. - macOS. Linux packaging is experimental, not the supported install path. - Treating files under `docs/plans/` as features. Optional features that do exist stay off until enabled: slideshow, camera looks, Git, scripting, media metadata, user metadata, remotes, and the Undelete toolbar button. ## Where this app stops and another tool starts The table in [reference.md](#src-docs-reference-md) (External programs) names, for each tool, what this app does and what the other tool does. Use that table. A short form: - This app owns its menus, settings, and the arguments it passes. Git, Python, mpv, WinFsp, Plex, TMDB, OMDb, and the FTP server own their own install, accounts, and internal errors. - This app does not install Git, Python, WinFsp, or Plex. - If it is unclear which side failed, compare the same `git` command in a terminal, or the same host in another FTP client, instead of blaming either side. - Do not invent their command-line flags. For how Git rebases, how Plex is installed, or how WinFsp drivers work, send the user to that project’s documentation. Official starting points (verify if you have a current browser; these were the projects’ own sites when this document was written): - Git: https://git-scm.com/doc - Python: https://www.python.org/doc/ - WinFsp: https://winfsp.dev/ - mpv: https://mpv.io/manual/master/ - Plex: https://support.plex.tv/ - TMDB API: https://developer.themoviedb.org/docs - OMDb: https://www.omdbapi.com/ - Microsoft Visual C++ redistributable: https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist ## Troubleshooting rules 1. Name the subsystem (preview, search, delete, slideshow, Git, scripts, network, remotes). 2. Use the symptom index and [troubleshooting.md](#src-docs-troubleshooting-md) before changing settings. Match the symptom, then the checks, then the resolution. 3. Check that an optional feature is enabled before debugging its absence. 4. Separate this app’s failure from Git, Python, an FTP server, Plex, TMDB, WinFsp, or Windows permissions. 5. Do not delete app data, empty the Recycle Bin, run Shift+Delete, or delete an NTFS USN journal as a generic fix. 6. If you do recommend renaming `%APPDATA%\MyFileExplorer`, say that settings, tabs, the search index, and scripts in that folder become unused until restored, and that notes on NTFS files are not in that folder. Tell the user to export settings first. 7. Do not ask for `settings.json`, `ai-secrets.json`, or a whole user profile. Ask for a redacted log excerpt. ## Project facts that are easy to get wrong - App data is `%APPDATA%\MyFileExplorer` for both the installer and `npm run dev`. Documents stay where the user put them. - Delete recycles. Shift+Delete is permanent. Ctrl+Z does not undo a permanent delete. The undo stack is memory for this run only, at most 30 operations. Quitting clears it. - **Search indexed roots** is the toolbar search-options checkbox. Settings → **Search index** is where roots and excludes are edited. **Enable localhost search API** is under Settings → **Advanced**, off, port 8081. - **Video thumbnail frame delay (ms)** is Settings → **Behavior** (default 300, range 50–2000). It is not on the Preview page. - `logs\main.log` is emptied on the next launch when it is larger than 2 MB. The previous lines are not kept. - The plan dialog is Ctrl on toolbar or menu **Paste** / **Delete**, or the keys **Ctrl+Delete** and **Ctrl+Shift+V**. Dragging with Ctrl copies. Ctrl+C, Ctrl+X, and Ctrl+V are clipboard commands. - Notes, icons, folder statistics, media metadata, user metadata, and image-edit versions are NTFS alternate streams on the file, not sidecars and not inside settings export. - Camera looks change the slideshow picture on screen only. - Ask AI does not upload the browsed folder. API keys are not in the settings export. - Python scripts need Python 3, not Python 2. - Hardware acceleration is disabled only at process start. Changing it needs a restart. --- # Symptom index Use this list to jump to a diagnosis. Paths are source documents. In `AI-SUPPORT.md` they are the matching source sections. | Symptom | Start here | | --- | --- | | Installer, first launch, version, uninstall left settings behind | [getting-started.md](#src-docs-getting-started-md), [troubleshooting.md](#src-docs-troubleshooting-md) | | Window closes immediately or never appears | [troubleshooting.md](#src-docs-troubleshooting-md) | | Delete vs Shift+Delete, no confirm, Recycle Bin restore | [reference.md](#src-docs-reference-md), [FAQ.md](#src-docs-faq-md) | | Permanent delete and Undelete | [UNDELETE.md](#src-docs-undelete-md), [troubleshooting.md](#src-docs-troubleshooting-md) | | Copy stopped on an existing name | [troubleshooting.md](#src-docs-troubleshooting-md) | | Copy says a name inside `default_app.asar` or `release\win-unpacked\resources\app.asar` no longer exists | [troubleshooting.md](#src-docs-troubleshooting-md) | | Undo did nothing, or undo is empty after a restart | [reference.md](#src-docs-reference-md), [FAQ.md](#src-docs-faq-md) | | Preview blank, video will not play, MKV, mpv | [PREVIEW.md](#src-docs-preview-md), [troubleshooting.md](#src-docs-troubleshooting-md) | | Search misses files or shows old names | [SEARCH.md](#src-docs-search-md), [troubleshooting.md](#src-docs-troubleshooting-md) | | Search results stuck in one view, or will not sort by date | [SEARCH.md](#src-docs-search-md), [FAQ.md](#src-docs-faq-md) | | Image editor text box will not take typing, or has no resize handles | [FAQ.md](#src-docs-faq-md), [reference.md](#src-docs-reference-md) | | Slideshow has no effect, or feels slow | [SLIDESHOW.md](#src-docs-slideshow-md), [FAQ.md](#src-docs-faq-md) | | Notes, covers, or folder stats missing after backup | [ADS.md](#src-docs-ads-md), [troubleshooting.md](#src-docs-troubleshooting-md) | | Git buttons missing or “not a git repository” | [GIT.md](#src-docs-git-md) | | Script or Ask AI error, fear that files were uploaded | [SCRIPTS.md](#src-docs-scripts-md), [AI_CHAT.md](#src-docs-ai-chat-md) | | Mapped drive or UNC folder empty | [NETWORKS.md](#src-docs-networks-md) | | FTP or SFTP login failed | [REMOTE_FTP.md](#src-docs-remote-ftp-md) | | Virtual Folder missing in Explorer | [VIRTUAL_FOLDER_PROJECTION.md](#src-docs-virtual-folder-projection-md) | | Settings export, secrets, what not to post | [configuration.md](#src-docs-configuration-md) | | Name order looks wrong (`file10` / `file2`) | [reference.md](#src-docs-reference-md) | | Power Rename changed the wrong names | [POWER_RENAME.md](#src-docs-power-rename-md) | | Paired folders compare, copy, or sync | [PAIRED_FOLDERS.md](#src-docs-paired-folders-md) | | Context menu command missing, or a custom command | [configuration.md](#src-docs-configuration-md) | | Check for updates, or where the installer is downloaded from | [FAQ.md](#src-docs-faq-md), [configuration.md](#src-docs-configuration-md) | | New file from a template, or a template missing after import | [FAQ.md](#src-docs-faq-md), [configuration.md](#src-docs-configuration-md) | --- # Product **Application:** MyFileExplorer **Repository:** https://github.com/dobrado76/MyFileExplorer **Package version in this repository:** 0.22.0 (`package.json`) **Newest changelog release section:** 0.22.0 (2026-10-23). Search results keep the folder view. The image editor text box, **Undo last**, and the Photoshop original-or-commit prompt are in that release. The changelog **Unreleased** section is empty. There is no 0.21.1 or 0.21.2 section. Do not invent patch notes between 0.21.0 and 0.22.0. **Running app version:** Settings → **About**. Use that version when it disagrees with this file. **License:** GPL-3.0. The name and logo are trademarks. See [LICENSING.md](https://github.com/dobrado76/MyFileExplorer/blob/main/LICENSING.md) and [TRADEMARK.md](https://github.com/dobrado76/MyFileExplorer/blob/main/TRADEMARK.md). MyFileExplorer is a Windows file manager (Electron + React). It browses the real filesystem. It does not move your files into its own database. Primary platform: Windows 10 and Windows 11. Linux AppImage helpers exist and are experimental. macOS is not a target. ## What it is for People who outgrow Windows File Explorer: many folders at once, previews, search, notes and metadata on the files themselves, scripts, and optional Git, media-library, and remote-server tools. A folder stays a folder. Extra meaning (notes, icons, folder statistics, movie metadata, image-edit versions, user-defined fields) is stored as NTFS Alternate Data Streams on that file or folder, not as sidecar files next to it. App preferences and session state live under `%APPDATA%\MyFileExplorer`. ## What a normal session includes - Tabs, up to four panes, and named layouts. - Details, icons, thumbnails, and list views, with Explorer-style name order unless you change it. - A preview pane for many file types, including images, video, PDF, Office-ish text, archives, and 3D meshes. - Copy, move, delete to the Recycle Bin, undo, and conflict review. - Optional search indexes, slideshow, scripts, Git, FTP/SFTP, media metadata, and user metadata. Those features stay off until you enable them. ## What it does not do - It does not replace every Windows Explorer feature, and it does not host Explorer shell extensions or cloud-provider shell namespaces. - It does not sync or back up NTFS alternate streams by itself. Most copy tools drop those streams. Back them up with a tool that copies ADS if you rely on notes, covers, or statistics. - It does not send your files to an AI provider. Optional script generation sends the task text and script source you submit, not the folder you are browsing. - It does not include the Everything search engine. Search is built in and only covers roots you choose to index, plus a live folder walk. - Parked notes under `docs/plans/` are not features. Do not describe them as available. ## Related documents Feature behavior is specified in the topic files under `docs/` (Search, Preview, Slideshow, Scripts, Git, and the others listed in [README.md](#src-docs-readme-md)). This support set adds install, settings, troubleshooting, and FAQ coverage around those files. --- # Getting started ## Install a release (Windows) 1. Open https://github.com/dobrado76/MyFileExplorer/releases/latest 2. Download `MyFileExplorer-x.y.z.exe` (the NSIS installer attached to that release). 3. Run the installer. 4. Start **MyFileExplorer**. The usual install location is: ```text %LOCALAPPDATA%\Programs\MyFileExplorer\MyFileExplorer.exe ``` Uninstall does **not** delete `%APPDATA%\MyFileExplorer`. Your settings, session, search index, and scripts remain. Deleting that folder yourself wipes them. It does not delete the files you were browsing, and it does not remove NTFS alternate streams already written onto those files. There is no macOS build. Linux packaging is experimental: [LINUX.md](#src-docs-linux-md). ## First session 1. Open a folder as a tab (address bar, tree, or **Ctrl+T**). 2. Select a file and confirm the preview pane shows it. **Ctrl+Shift+P** toggles the preview surface. 3. Press **Delete** on a disposable file. It goes to the in-app Recycle Bin (tab bar and/or tree, unless you hid it). Restore it from that view. **Enter** on a selected Recycle Bin item restores it. 4. Settings → **About** shows the running version. **Export…** writes a portable settings file. Store that file somewhere you back up. Do not publish it: it can contain folder paths, host names, and media-metadata tokens. ## Where your app data lives Both the installed app and `npm run dev` use: ```text %APPDATA%\MyFileExplorer\ ``` Override only when you mean to: environment variable `MFE_USER_DATA`, or `MFE_ISOLATED_USER_DATA=1` for a repository-local `.dev-user-data\` folder. Do not point those at a folder you browse as documents. Important files (details in [PROJECT_FORMAT.md](#src-docs-project-format-md)): | Path | Role | | --- | --- | | `settings.json` | Preferences. Private. Do not paste it into a bug report. | | `session.json` | Open tabs, selection, scroll, splitters. Not included in Settings export. | | `window-state.json` | Main window position. Not exported. | | `search-index.sqlite` | Search index. | | `logs\main.log` | Main-process log. Rotates by truncation when it exceeds 2 MB. | | `ai-secrets.json` | Scripting AI API keys (OS-protected storage). Never exported. | | `scripts\` | Saved script library. | ## Confirm the app is working - The window opens and lists a local disk. - Creating a tab and going **Back** (Alt+Left or Backspace when history exists) returns to the previous folder. - **F5** refreshes the listing. - A PNG or JPEG shows in the preview pane. If the window never appears, see [troubleshooting.md](#src-docs-troubleshooting-md). ## Build from source Only if you are developing or you cannot use a release installer: ```bash npm install npm run dev ``` `npm run check` is typecheck, lint, tests, and the support-doc freshness check. Full build and release steps: [BUILD.md](https://github.com/dobrado76/MyFileExplorer/blob/main/docs/BUILD.md). Developer dependencies (Node.js, a C++ build environment for native modules) are not required for the installer. --- # Configuration Preferences live in `%APPDATA%\MyFileExplorer\settings.json`. Change them in **Settings** (the gear). They apply as you change them; there is no separate Save button for the settings window. Settings has a search box at the top. It filters the section list (about 180 ms after you stop typing). ## Sections | Section | What it controls | | --- | --- | | **Appearance** | Theme (dark, light, custom colors), font family and size, icon size, tab width and tab icons, tree pin, Recycle Bin placement. **Show Undelete toolbar button** is off by default. | | **Behavior** | Folders first, **Name sort**, **Item check boxes**, **Paste non-file clipboard as a file**, default new-tab path, **Always confirm permanent delete**, **Open Command Line** (cmd or PowerShell), **Hide extensions in names**, **Video thumbnail frame delay (ms)** (default 300, range 50–2000), folder statistics, Virtual Folder OS projection (off). New-file templates are **New → From Template** / **Manage Templates…** (cap 40). The catalog is in settings; the file copies are `%APPDATA%\MyFileExplorer\Templates\`. | | **Context menu** | Hide, reorder, and add commands. **Discover** can add static shell verbs. Custom commands are stored in settings. | | **Quick access** | Pinned folders and groups in the tree. | | **Quick launch** | Toolbar buttons that start other programs. The strip is hidden when the list is empty. Cap 24. | | **Layouts** | Named workspace snapshots. **Auto-save when switching layouts** defaults on. Cap 50. Order in this list is the menu order. | | **Folder views** | Per-folder view mode, sort, and Details columns. Separate from layouts. | | **View filter** | Patterns the toolbar eye applies (hidden names such as `node_modules`, wildcards). The eye can be turned off per session. | | **Preview** | **Show preview by default** (on), **Max text preview bytes** (default 2 MB), **Word wrap text preview** (off), **Autoplay media in preview** (off), **Rich player (mpv)** (off). | | **Search index** | Indexed folders, excludes, **Show hidden files in search**, bookmarks, saved filters. The toolbar search-options checkbox **Search indexed roots** is remembered, but it is not a control on this page. | | **Network** | LAN discovery and mapped-drive behavior. | | **Windows integration** | **Redirect folder openings to MyFileExplorer** (experimental, off until you opt in). Machine-local; not in a settings export. **Restore previous folder-opening configuration** puts the old verbs back. See [WINDOWS_SHELL_REDIRECT.md](#src-docs-windows-shell-redirect-md). | | **Remote repositories** | FTP, FTPS, and SFTP. Off until enabled. Passwords are not written into a settings export. | | **Slideshow** | **Enable slideshow UI** (off). Delay default 2000 ms. Include subfolders defaults on. **Camera looks** off until enabled. | | **Media Metadata** | Movie/TV metadata. Off. Cover height default 120 px. | | **Metadata** | User-defined fields. **Enable** is off. | | **Git** | Git overlays and actions. **Enable Git integration** is off. Uses the `git` on your PATH unless you set **Git executable**. | | **Scripting and AI** | **Enable scripting** is off. Interpreters, Ask AI, providers. API keys are not stored in `settings.json`. | | **Advanced** | **Disable hardware acceleration** (off; restart required). **Enable localhost search API** (off, port 8081, loopback only). | | **About** | Running version, **Export…**, **Import…**, **Check for update**. **Folder or URL** is a local installer folder or a GitHub Releases URL. | ## Defaults that surprise people - **Name sort** defaults to **Windows Explorer** (digit runs compare as numbers). **Character by character** orders `file10` before `file2`. The file list, the tree, and slideshow name order share this. Inside a media library, thumbnail and icon Name order is still season then episode. - **Folders first** is on. Media Metadata can mix files and folders in icon/thumbnail view of a library when that option is on. List and Details still follow Folders first. - **Delete** goes to the Recycle Bin. **Shift+Delete** is permanent. **Always confirm permanent delete** is off, so a single file may delete after less prompting than a multi-selection or a folder. Do not test this on files you need. - **Hide name extensions** defaults to `lnk` and `mfevirtual`. The file is still there; the label omits the suffix. Rename and tooltips use the real name. - **Search excludes** start as `node_modules`, `.git`, `.hg`, `.svn`, `Thumbs.db`. - **Search indexed roots** is off, so the toolbar searches the current folder by walking it until you turn that checkbox on. - **Paste screenshots and text** is on. A URL becomes a `.url` shortcut. The page is not downloaded. - **Hardware acceleration** stays on unless you disable it under Advanced. Turn it off only when the GPU must be left to another program, then restart the app. ## Export and import Settings → **About** → **Export…** writes an envelope: - `format` is `myfileexplorer-settings`. - The settings document is included, except dialog and window geometry (positions and sizes of tool windows). - Network hosts and remote connection definitions are included **without passwords**. - The script library source is included **without AI API keys**. Not included: `session.json` (open tabs), `window-state.json`, thumbnail cache, search index, `ai-secrets.json`, custom Quick Launch PNG files, or the file bytes under `Templates\`. The template catalog (names and stored filenames) is inside the settings document; the copies themselves are not. **Import…** replaces settings (and those sidecars when the file contains them). A raw `settings.json` is also accepted. Import overwrites the current preferences. Export first if you might want the old ones back. ## What is not a setting These live on the NTFS file or folder as alternate data streams. They survive settings import, and they are **not** inside the settings export: - Notes (`mfe_note`), item icons, folder statistics, media metadata and covers, user-metadata values (`mfe_meta`), image-edit versions (`VER_1`…`VER_4`). Copying that file to a non-NTFS disk, or backing it up with a tool that ignores ADS, drops them even when the main bytes copy successfully. ## Privacy before you share a config file Export is safer than `settings.json`, and it is still not public. It can list folder paths, Quick Launch program paths, Plex/TMDB/OMDb fields, Git tool templates, and remote host names. Remove those before posting an issue. Never attach `ai-secrets.json` or a live `settings.json`. --- # Reference Exact behavior for support questions. Feature essays live in the topic documents. This page is the short contract. ## Keyboard (file window) These are handled by the explorer shell when a text field is not focused. During rename, **Delete** and **Backspace** edit the name; they do not delete the file. | Chord | Action | | --- | --- | | Ctrl+T | New tab | | Ctrl+W | Close the active tab | | Ctrl+Shift+T | Reopen the most recently closed tab (cap 25). Search-result tabs are not restored. | | Ctrl+Tab | Next tab | | Alt+Left | Back | | Alt+Right | Forward | | Backspace | Back if this tab has history; otherwise up. In the Recycle Bin view, leaves that view. | | F5, Ctrl+R | Refresh the listing (not a browser reload) | | F2 | Rename the single selection, or the focused tree folder | | Ctrl+C / Ctrl+X / Ctrl+V | Copy, cut, paste files. If text is selected, Ctrl+C copies that text instead. | | Ctrl+Shift+V | Paste as a plan (review before the copy runs) | | Ctrl+A | Select all | | Ctrl+Z | Undo the last file operation the app recorded | | Ctrl+Y, Ctrl+Shift+Z | Redo | | Delete | Recycle the selection (tree focus recycles that folder) | | Shift+Delete | Permanent delete | | Ctrl+E | Edit image, when exactly one editable image is selected | | Ctrl+F | Power Search | | Ctrl+Shift+F | Focus the toolbar search box | | Ctrl+Shift+P | Toggle the preview surface | | Ctrl+L | Edit the address bar | | Enter | Open the selection. In the Recycle Bin, restore it. | ## Help The tab bar **?** sits next to the Recycle Bin icon. Its tooltip is **Help**. The menu has **GitHub documentation** (opens [the docs](https://github.com/dobrado76/MyFileExplorer/blob/main/docs/README.md) in your browser) and **Copy AI support link** (copies `https://raw.githubusercontent.com/dobrado76/MyFileExplorer/refs/heads/main/AI-SUPPORT.md`). ## Image editor keys While the image editor is open, the file-window chords above do not run. **Ctrl+S** saves. **Escape** closes the editor. A new annotation text box stays selected and uses the same move and resize handles as a rectangle. Letters, including **E**, **Backspace**, and **Delete** type into that box. **Escape** leaves the text box first; a second **Escape** closes the editor. **Undo last** drops only the newest saved version. **Plan before a write:** hold Ctrl while clicking **Paste** or **Delete** on the toolbar or the context menu, or press **Ctrl+Delete** or **Ctrl+Shift+V**. That opens the plan dialog (dry run) before anything is written. **Ctrl+C**, **Ctrl+X**, and **Ctrl+V** are clipboard copy, cut, and paste. Dragging with Ctrl copies; it does not open the plan. A tab can have its own drop shortcut (right-click the tab → **Set drop shortcut…**). That chord moves or copies the focused selection into the tab’s folder. It cannot reuse a chord in the table above. **Auto** uses extra Shift/Ctrl on the keypress to force copy or move; the tab can instead be **Always move** or **Always copy**. ## Slideshow keys Esc, Space, Enter, or a click stops the show. `\` undoes the last categorize or delete still buffered in the show. Crop keys are documented in [SLIDESHOW.md](#src-docs-slideshow-md). Camera looks do not change the file. ## Name order - **Windows Explorer** (default): Windows `StrCmpLogicalW`. Digit runs compare as numbers. `002` before `02` before `2`. - **Character by character**: `0` before `s`. `file10` before `file2`. Settings → Behavior → **Name sort**. ## Delete, undo, conflicts - **Delete** uses the Windows Recycle Bin through the app. Restore from the in-app Recycle Bin. The app does not send you to Explorer’s bin. - **Shift+Delete** is permanent. Multi-select and folders ask for confirmation. A single file may not, unless Settings → Behavior → **Always confirm permanent delete** is on. - Long copy, move, trash, and delete show progress and **Cancel**. - If some names already exist, items that can proceed do so. One review at the end offers Skip, Keep both, Replace, Keep most recent, and Retry. - Undo/redo covers the file operations the app performed (copy, move, rename, delete, and similar). The stack is memory for this run only, at most 30 operations. Quitting clears it. It does not undo edits made in another program. It does not restore a permanent delete; that needs **Undelete** (NTFS MFT), which is not the same as Recycle Bin restore and does not always succeed. ## Storage map | Data | Where | | --- | --- | | Preferences | `%APPDATA%\MyFileExplorer\settings.json` | | Open tabs | `session.json` in that folder | | Window position | `window-state.json` | | Search index | `search-index.sqlite` | | Logs | `logs\main.log`. On the next launch, a file larger than 2 MB is emptied. Lines from before that launch are gone. | | Scripts | `scripts\` | | AI API keys | `ai-secrets.json` (not in export) | | Notes, icons, stats, media metadata, user metadata, image versions | NTFS ADS on the file or folder | `MFE_USER_DATA` replaces the app-data directory. `MFE_ISOLATED_USER_DATA=1` uses `.dev-user-data\` in the repo. Neither changes the files you browse. ## File formats this app owns | Extension or stream | Meaning | | --- | --- | | `.mfevirtual` | Virtual Folder document: references to real paths, not copies of the files. | | `.map` | Slideshow categorizer map imported or exported from Mapping Manager. The live map is also inside settings. | | Settings export | JSON envelope `format: "myfileexplorer-settings"`. | Preview reads many other extensions (images, video, PDF, archives, Office text, meshes). The list is [PREVIEW_EXTENSIONS.md](#src-docs-preview-extensions-md). The app does not become the editor for those formats except the in-app image editor for images it can edit. ## Launch from another program ```text MyFileExplorer.exe --reveal "D:\Projects\shot.png" MyFileExplorer.exe --open "D:\Projects" mfe://reveal?path=D%3A%5CProjects%5Cshot.png ``` `--reveal` selects a file in its parent folder. `--open` opens a folder tab. A second launch focuses the running instance. Details: [INTEGRATION.md](#src-docs-integration-md). ## External programs (boundary) | Tool | Required? | This app | The other tool | | --- | --- | --- | --- | | Windows | Yes | File manager UI, Recycle Bin calls, NTFS | The operating system, Explorer, permissions, UAC | | `git` | Only if Git is enabled | Menus, overlays, how arguments are passed | Clone, commit, credentials, hooks | | PowerShell, Python 3, cmd, or bash | Only for scripts | Editor, runner, context menu, dry-run | Language, modules, execution policy | | mpv | Only if Rich player is on | Settings → Preview, overlay when Chromium cannot play the file | Decoding that container. Also searched on PATH. Developers can run `npm run tools:fetch-mpv`. | | WinFsp | Only for Virtual Folder OS projection | Mount request and the projection service from the release zip | The filesystem driver | | TMDB, OMDb, Plex | Only for media metadata download/extract | Stores results on the folder as ADS | Their accounts, APIs, and servers | | FTP/SFTP server | Only for remotes | Client UI and transfers | The server, accounts, host keys | This app does not install Git, Python, WinFsp, or Plex for you. Which side failed: - **Windows.** If Explorer also cannot open, rename, or delete the same path, the failure is Windows permissions or a sharing lock. If Explorer can and this app cannot, quote this app’s dialog. UAC prompts are Windows. - **Git.** Run the same `git` command in a terminal ([Git’s documentation](https://git-scm.com/doc)). The same error there is Git’s. A missing **Commit / Pull / Push** bar with Git enabled and `git --version` working is this app’s (the folder is not a repository, or **Git executable** is wrong). This app has no password field. - **PowerShell, Python 3, cmd, or bash.** `python --version` must report 3.x ([Python’s documentation](https://www.python.org/doc/)). Python 2 is not used. A non-zero exit printed in the runner is the script or the interpreter. A missing **Scripts** menu means **Enable scripting** is off. - **mpv.** If Chromium plays the file, leave Rich player off. If the container is MKV, AVI, or WMV and playback fails with Rich player on, check `mpv` on PATH against [mpv’s manual](https://mpv.io/manual/master/). A missing mpv is not a decode bug in this app. - **WinFsp.** The `.mfevirtual` file still opens inside this app with the setting off. Explorer shows the tree only after WinFsp and the projection service from the release zip are installed ([WinFsp](https://winfsp.dev/)). - **TMDB, OMDb, Plex.** This app stores titles and posters on the folder. It does not play video through Plex. A rejected key or an empty lookup is the provider ([Plex](https://support.plex.tv/), [TMDB](https://developer.themoviedb.org/docs), [OMDb](https://www.omdbapi.com/)). Playback of the file is Chromium or mpv. - **FTP/SFTP.** Try the same host in another FTP client. Failure there is the server or the firewall. Success there and failure here is this app’s protocol, port, or passive mode. Do not send the password. ## Limits (verified) - Layouts: 50. Templates: 40. Quick Launch: 24. Recently closed tabs: 25. Reopen closed window: 10. - Slideshow image-list cache cap: 100 000 paths. - Text preview default max: 2 097 152 bytes. - Image-edit versions kept on the file: 4 (`VER_1`…`VER_4`). - Custom camera looks: 24, up to 8 sliders each. - Folder space-map file tiles: default 50 000 (range 100–50 000). - Media Metadata Watched/Genre filters: max 200 stored folder choices (`libraryFilters` on media metadata, not user metadata). - `main.log` truncates when larger than 2 MB. ## Generation metadata When a PNG or JPEG contains an Automatic1111-style parameter block (PNG text, JPEG comment, or EXIF description/comment), the preview can show prompt, negative prompt, steps, sampler, CFG, seed, size, model, and VAE. **Raw parameters** appears when the prompt or negative prompt did not parse. Details columns can show a subset of the same fields. --- # Troubleshooting Least invasive check first. Do not delete `%APPDATA%\MyFileExplorer` as a first step. That removes settings, tabs, the search index, and saved scripts. It does not remove notes stored on your files. When a step says “export settings”, use Settings → **About** → **Export…** and keep the file offline. ## The window never opens, or it closes immediately **Causes:** A previous crash, a bad GPU driver, or a broken `settings.json`. **Checks:** 1. Look at `%APPDATA%\MyFileExplorer\logs\main.log`. On the next launch, a file larger than 2 MB is emptied and logging starts over. Lines from before that launch are gone. If the app is still running and the file is already over 2 MB, those lines are still there until the next start. 2. If the log mentions the GPU or the window flashes then dies, set hardware acceleration off. If you cannot open Settings, start once with a copy of the app data folder renamed aside (see below) so defaults load. **Resolution:** If Settings still opens, use **About** → **Export…** and keep that file offline first. Then rename `%APPDATA%\MyFileExplorer` to `MyFileExplorer.bak` and start the app. If it opens, the previous app data was the problem. Copy `settings.json` back only after you have a working window; if the copy makes it crash again, keep the new folder and use pieces of the export. If Settings never opened, the renamed folder is the backup. Documents and NTFS notes on your files are not in that folder. What changes is only the app-data folder: settings, tabs, the search index, and saved scripts sit unused until you copy them back. **Expected result:** A window on This PC or your last tabs, using either the repaired settings or fresh defaults. Windows 10 machines missing the Visual C++ runtime were a startup failure before 0.21.0. Current builds ship those DLLs. If an old build still fails before any window, install the [Microsoft Visual C++ redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) or update MyFileExplorer. ## Settings won’t open, or a change does nothing **Causes:** A second copy is using `MFE_USER_DATA`, Import replaced the settings file, or the control only applies after a restart (hardware acceleration). **Checks:** You are in the installed app, not a second copy pointed at `MFE_USER_DATA`. Confirm the path in a log line or by the fact that an export from **About** matches what you see. **Resolution:** Change the control again. Settings write through immediately. If Import just ran, it replaced the whole file; the control you remember may have been overwritten. **Expected result:** The next file listing or preview follows the new value. Hardware acceleration needs a restart. ## Delete did not ask, and the file is gone **Causes:** **Delete** recycles. **Shift+Delete** permanently deletes. A single file can skip the extra confirm when **Always confirm permanent delete** is off. **Checks:** Open the in-app Recycle Bin (tab bar or tree). If the file is there, select it and press **Enter** or Restore. **Resolution:** If it is not in the bin, it was permanent. **Undelete** (Settings → Appearance → **Show Undelete toolbar button**, then the tab-bar icon) scans the NTFS MFT. It only helps on NTFS, only for data still in free space, and it needs an administrator prompt when the volume cannot be read otherwise. It is not Recycle Bin restore. Undelete writes new files. It does not put the original back in place. What can be lost is a destination file of the same relative path if you pick a folder that already has one; the app uses `name (2).ext` rather than a silent overwrite, and a partial parent chain is written under `_incomplete`. Copy aside anything in the destination you still need. Pick a **different**, empty folder. The scan can fail when Windows reused the disk space. The original clusters are not changed by a failed scan. **Expected result:** Either the bin restore puts the file back, or Undelete writes a copy under the folder you chose, with relative parent folders. If the clusters were reused, recovery cannot succeed. The app cannot fix that. ## Copy or move stopped on a name that already exists **Causes:** Continue-then-review. Items that do not collide finish. Copying a folder creates that destination folder and keeps filling it; the folder just created is not itself a collision, and it shows up in the list and the tree while the copy is still running. One item inside the folder that cannot be copied does not stop the rest of the folder. One dialog then lists the real collisions. A folder you can open is part of the copy. The review is for access denied and real name collisions. **Checks:** Read the review dialog. It names the conflicting item. The destination folder already created is not itself the collision. **Resolution:** Choose Skip, Keep both, Replace, Keep most recent, or Retry per group. Skip applies to the listed item, not to the whole folder the copy already created. **Cancel** on the progress line stops work still queued. Next time, hold Ctrl while clicking **Paste** or **Delete**, or press **Ctrl+Shift+V**, to open the plan before anything is written. Dragging with Ctrl only copies. **Replace** overwrites the destination file with the source. Copy that destination file aside first if you might still need it. **Keep both** writes a new name and leaves the destination file. **Skip** leaves the destination file. **Keep most recent** overwrites the older of the two. None of these choices touch files that were not in the review. **Expected result:** The destination folder is filled. The review, if it appears, names the conflicting item inside it. **Ctrl+Z** undoes the operation the app recorded, when undo data still exists. ## Copy leaves out two Electron archives **Causes:** These paths are not copied. Opening them reports names that exist only inside the archive (for example `octicon`), or “Invalid package”: - `node_modules\electron\dist\resources\default_app.asar` - `release\win-unpacked\resources\default_app.asar` - `release\win-unpacked\resources\app.asar` The source folder is unchanged. Any other `.asar` file is copied as one file. Verify copy can stay on. **Checks:** The message names a path inside one of those three archives, or it says “Invalid package”. **Resolution:** Nothing to restore for those paths. If an older copy left an empty folder with one of those names, delete only that empty folder and copy again. Deleting it removes that empty destination folder, not the source archive and not any other folder of the same name. Confirm the folder is empty and that its path is one of the three above before you delete it. **Expected result:** The destination does not contain those archives. Copy review does not list names from inside them. ## A file is “in use” or will not rename **Causes:** Preview, a video player, mpv, or another process has the file open. Rich player and Chromium preview are not supposed to lock the file for the whole session; another app still might. An `.asar` file is special: Electron keeps one mapped after any look at it, until that Electron process quits. Listing or indexing it in this app does not do that. Cursor and any other Electron app that already opened the archive still will, until that process quits. **Checks:** Close preview (**Ctrl+Shift+P**), stop Now Playing, and close external players. The busy-file review can list processes and offer End task. **Resolution:** Close the preview and the other program the normal way first. Use End task only when that program will not close. End task kills that process. Unsaved work in it is lost. It does not delete the file you were renaming. Save that program’s work, or accept the loss, before you confirm End task. **Expected result:** Rename or move proceeds. If Windows still reports sharing violation, the holder is outside this app. ## Preview is blank or says it cannot display the file **Causes:** The extension has no in-app preview, the container needs mpv, or the text file is past the preview byte limit. **Checks:** 1. Extension is in [PREVIEW_EXTENSIONS.md](#src-docs-preview-extensions-md). If not, use **Open with default app**. 2. For video, Chromium plays common MP4/WebM/MOV. MKV, AVI, WMV, and similar use **Open with default app** unless Settings → Preview → **Rich player (mpv)** is on and mpv is available. 3. Text files over the preview byte limit are truncated (default 2 MB, Settings → Preview). **Resolution:** Turn on Rich player only for containers Chromium does not play. If mpv is missing, install it on PATH or, from a source checkout, `npm run tools:fetch-mpv`. Decode errors do not silently switch to mpv. **Expected result:** A picture, a player, a text excerpt, or a clear “open externally” action. Not a crash. ## Search finds nothing, or finds stale names **Causes:** Indexed search is on but the folder was never indexed. Or the index has not caught up. Or the term is excluded (`node_modules`, `.git`, …). Or you are matching the file name only and the word is in the path. **Checks:** Settings → **Search index**. See whether this folder is a root. Toolbar indexed-only mode restricts hits to those roots. **F5** refreshes the listing; it does not rebuild the whole drive index by itself. **Resolution:** Add the folder as an index root, or turn indexed-only off to walk the open folder. Remove an exclude that matches the name. After a large rename, give the USN journal a moment, or rebuild that root from the search settings if the UI offers reindex for that root. **Expected result:** New hits match the current names. Deleted files disappear from results when the index updates. Deleting inside the app also drops stale hits from the open search. ## Slideshow looks the same as the original photo **Causes:** **Enable slideshow UI** is on (otherwise there is no show), but **Camera looks** is off, or frequency is 0, or the path filter misses this file, or this slide was not rolled, or crop mode is on. **Checks:** Settings → Slideshow. **Camera looks** must be checked. Open **Camera looks…** and set frequency above 0. At least one effect must be checked. Clear the path filter or use a path that matches. **Resolution:** Leave Dusty lens unchecked if the show feels slow. The look is painted at display time. The JPEG on disk does not change. Reopen the slideshow after changing the master switch. **Expected result:** Some slides (by frequency) show the effect. The same playlist index keeps the same look until you change frequency, the checked effects, the switch, or the filter. ## Notes, covers, or folder sizes disappeared after a backup restore **Causes:** The backup copied the main file bytes and dropped NTFS alternate streams. **Checks:** The file’s size and date look right, but **Note…**, the cover, or **Calculate Statistics** data is gone. Settings export will not contain them. **Resolution:** Restore again from a copy that kept ADS, or recreate the note. Prevent the next loss with a backup tool that copies alternate streams on NTFS→NTFS. This app does not reconstruct streams from a byte-only backup. **Expected result:** After an ADS-aware restore, the note and cover show again without retyping. ## Git buttons are missing, or Git says it is not a repository **Causes:** Git is still off, `git` is not on PATH, or the folder is not inside a repository. **Checks:** Settings → **Git** → **Enable Git integration**. `git` works in a terminal (`git --version`). The folder, or a parent, contains `.git`. **Resolution:** If you deleted `.git`, the toolbar is supposed to clear. Point **Git executable** at `git.exe` if it is not on PATH. Credentials stay in Git’s own credential helper. This app does not store them. **Expected result:** Status overlays and Commit / Pull / Push on a real repository. Failures printed from Git are Git’s errors. Read them in the Git output. Fix remotes and auth in Git, not by resetting MyFileExplorer settings. ## A script will not start **Causes:** Scripting is off, or the chosen interpreter is missing or is Python 2. **Checks:** Settings → **Scripting and AI** → **Enable scripting**. The runner matches the file: PowerShell, **Python 3** (not 2.x), cmd, or bash. Python 2 is not used. **Resolution:** Install that interpreter and, if needed, set its path in the scripting settings. Read the script output pane. A non-zero exit is the script or the interpreter, not a broken file list. Dry-run when the script offers it before you point it at a large folder. **Expected result:** Live output in the runner. **Stop** ends the process. Saved scripts reappear under **Scripts** on the context menu. ## Ask AI fails, or you are worried it uploaded your photos **Causes:** No provider, no key, or the provider rejected the call. Keys live in `ai-secrets.json`, not in settings export. The request sends the description you type and the script text involved in that request. Browsed files and paths are not attached as your documents. **Checks:** Settings → **Scripting and AI** shows a provider and a model. The key is saved there. A later run of a saved script does not call the provider. **Resolution:** Fix the provider URL and key. See the provider’s own status page if the key is valid and the call still fails. Do not paste the key into an issue. **Expected result:** A script draft you can edit and run locally afterward. Later runs of the saved script do not call the provider. ## Network drive is empty or was dropped from the tree **Causes:** The share is offline, the mapped letter is disconnected, or the session listing cache is cold. **Checks:** The share is online. A mapped letter that is disconnected can be reconnected from the tree without opening Explorer. Offline tabs are supposed to wait, not vanish, for encrypted and network paths. **Resolution:** Expand **Network**, click the drive, and retry. UNC paths reopen from the session listing cache when the cache is warm. Details: [NETWORKS.md](#src-docs-networks-md). **Expected result:** The folder lists. If Windows itself cannot open the share, this app cannot either. ## FTP or SFTP will not connect **Causes:** Remotes are off, or the host, port, protocol, or account does not match the server. **Checks:** Settings → **Remote repositories** is enabled. Host, port, protocol, and user match the server. A password is stored for the connection (export will not show it). **Resolution:** Test the same host with a dedicated FTP client. If that fails, the server or the firewall is the problem. If that works and this app does not, compare passive mode, FTPS versus FTP, and the exact port. Capture the error text from the connect dialog. Do not send the password. **Expected result:** A remote tab you can browse. Transfers use this app’s progress line. ## Virtual Folder projection does not show in Explorer **Causes:** WinFsp is missing, the projection service from the release zip is not installed, or Settings → Behavior → **Virtual Folder OS projection** is off. **Checks:** You installed [WinFsp](https://winfsp.dev/), installed the projection service from the release zip, and turned that setting on. The `.mfevirtual` file opens inside MyFileExplorer even without WinFsp. **Resolution:** Follow [VIRTUAL_FOLDER_PROJECTION.md](#src-docs-virtual-folder-projection-md). Projection is Windows-only. Without it, the collection still works inside this app. **Expected result:** Explorer shows the projected tree, or you keep using the collection only inside MyFileExplorer. ## The app is slow on a huge folder **Causes:** Thumbnail generation, a preview parsing a large file, an index walk, or a camera look that samples the image many times (Dusty lens). **Checks:** Switch the view to List or Details. Collapse the preview. Pause slideshow camera looks. Exclude `node_modules` from search. **Resolution:** Hardware acceleration off can make the UI slower; turn it back on if you disabled it for a GPU job and the job is finished. Restart after that change. **Expected result:** Scrolling stays responsive. Tens of thousands of files in one folder is a supported case; a multi-terabyte recursive search of an unindexed disk is not meant to feel instant. ## How to report a bug 1. Settings → **About**: version. 2. Windows version. 3. What you did, what you expected, what happened. Quote the dialog text. 4. A few lines from `logs\main.log` around the time of the failure. Remove paths you do not want public. 5. Do not attach `settings.json`, `ai-secrets.json`, or a full user profile. https://github.com/dobrado76/MyFileExplorer/issues --- # FAQ Answers describe the shipping app. Settings → **About** is your build’s version. Topic files linked from [README.md](#src-docs-readme-md) are the long form. ## Install and updates ### 1. Where do I download MyFileExplorer? https://github.com/dobrado76/MyFileExplorer/releases/latest — the Windows installer is `MyFileExplorer-x.y.z.exe`. It is not stored in the git repository because of its size. ### 2. Where is it installed? Usually `%LOCALAPPDATA%\Programs\MyFileExplorer\MyFileExplorer.exe`. ### 3. Does uninstall delete my settings? No. `%APPDATA%\MyFileExplorer` is left in place. Your documents are untouched either way. Alternate streams already written on those documents stay until something else removes them. ### 4. Does uninstall delete my files? No. ### 5. I installed a new version and my tabs are gone. Where are they? Tabs are `session.json` in app data, not in the installer. An upgrade should keep that folder. If you renamed or deleted `%APPDATA%\MyFileExplorer`, the session is gone. Settings export does not contain open tabs. ### 6. How do I see the version? Settings → **About**. ### 7. Can I run it on macOS? No supported build. ### 8. Can I run it on Linux? Experimental AppImage helpers only. [LINUX.md](#src-docs-linux-md). Windows is the platform the features are written for. NTFS alternate streams, the Recycle Bin, WinFsp projection, and Undelete are Windows behaviors. ## Windows and files ### 9. How is this different from File Explorer? Same basic habits: Delete recycles, Ctrl drags a copy, shell icons, right-drag menus. Added: tabs that restore, a real preview, search you scope yourself, notes on the file, scripts, optional Git and media tools. It does not host shell extensions. ### 10. How do I open a folder? Address bar (**Ctrl+L**), the tree, or **Ctrl+T** for a new tab. Another program can run `MyFileExplorer.exe --reveal "D:\path"`. ### 11. How do I go back? Alt+Left, the Back button, or Backspace when the tab has history. If there is no history, Backspace goes up. In the Recycle Bin, Backspace leaves the bin. ### 12. How do I refresh? **F5** or **Ctrl+R**. That reloads the listing. It is not a web-page reload. ### 13. How do I rename? Select one item and press **F2**. While the name is being edited, Delete and Backspace change the text. Dragging a selection inside the name and releasing outside the box stays in rename. ### 14. What does Delete do? Sends the selection to the Recycle Bin. The tree’s focused folder is deleted if the key event is on the tree. Restore from the in-app Recycle Bin. **Enter** there restores the selection. ### 15. What does Shift+Delete do? Permanent delete. It does not go to the Recycle Bin. **Ctrl+Z** will not bring it back. Undelete is a separate, best-effort NTFS scan. ### 16. Why was there no confirm? **Always confirm permanent delete** is off by default (Settings → Behavior). Multiple items and folders still confirm. Turn that option on if every permanent delete must ask. ### 17. Can I undo a copy, move, or rename? **Ctrl+Z** undoes the last file operation the app recorded. **Ctrl+Y** or **Ctrl+Shift+Z** redoes it. The stack is memory for this run only, at most 30 operations. Quitting clears it. Undo does not reverse another program’s save, and it does not reverse Shift+Delete. ### 18. How does a name collision work? The rest of the copy finishes, including the other items inside a folder. The destination folder created for that copy is not a collision, and it shows up in the list and the tree as soon as it is created. One review lists the real collisions: Skip, Keep both, Replace, Keep most recent, Retry. A folder you can read and write is copied; the review is for access denied and real name collisions. To preview first, hold Ctrl while clicking **Paste** or **Delete**, or press **Ctrl+Delete** or **Ctrl+Shift+V**. **Ctrl+C** / **Ctrl+V** stay normal clipboard commands. Dragging with Ctrl copies and does not open the plan. ### 19. How do I cancel a long copy? The status bar progress has **Cancel**. ### 20. Paste created a PNG I did not expect. **Paste non-file clipboard as a file** is on by default (Settings → Behavior). A copied screenshot becomes a PNG in the folder. A copied URL becomes a `.url` shortcut and is not downloaded. Turn that option off to stop that. ### 21. How do I create a symlink? File Tools → **Create link…** — symbolic link, hard link, or junction. Windows may require administrator rights for some symbolic links. ### 22. How do I open Command Prompt here? **Open Command Line here**. Settings → Behavior chooses cmd or PowerShell. Shift runs it as administrator (UAC). ### 23. Where is the Recycle Bin in the window? Settings → Appearance → placement: none, tree, toolbar, or both. Default is both. The **?** next to that icon (it stays on the tab bar even when the bin is hidden) is Help. **GitHub documentation** opens the docs in your browser. **Copy AI support link** copies `https://raw.githubusercontent.com/dobrado76/MyFileExplorer/refs/heads/main/AI-SUPPORT.md`. ### 24. Can I cut and paste into Explorer and back? Yes. The clipboard uses the normal Windows file drop format, so Cut pastes as a move in both directions. ## Tabs, panes, layouts ### 25. How do I close a tab and get it back? **Ctrl+W** closes it. **Ctrl+Shift+T** or the tab bar **Recently closed** reopens it. The stack holds 25. **Clear recently closed** empties it. A search-results tab is not restored. ### 26. How do I use two folders at once? The layout control switches 1, 2, 3, or 4 panes. Two panes can show a paired-folder rail (copy and compare). See [PAIRED_FOLDERS.md](#src-docs-paired-folders-md). ### 27. What is a named layout? A snapshot of tabs, pane layout, and window positions, including extra explorer windows. Settings → **Layouts**. Switching layouts auto-saves the one you left when that option is on (default on). Applying a layout closes explorer windows that are not in the snapshot. Cap 50. ### 28. What is a view preset versus a folder view? A view preset stores mode, sort, and Details columns and can be applied without creating a per-folder override. A folder view is an override stored for that path. Apply of a preset patches an existing override; it does not create one. ### 29. How do I move a tab to another window? Tab menu **Move to new window**. **Merge into main window** sends it back. Closing a floated window asks Merge or Close tabs. **Reopen closed window** keeps up to 10. Dragging a tab off to tear it is not in this version. ### 30. What is a tab drop shortcut? Right-click a tab → **Set drop shortcut…**. Pressing that chord copies or moves the focused selection into the tab’s current folder. Reserved chords such as Ctrl+C are rejected. The shortcut is saved on the tab and in layouts. ### 31. Why did an offline network tab stay instead of disappearing? Encrypted and network paths are kept so they can reconnect. They are not deleted from the session just because the disk was asleep. ## View and sort ### 32. Why is `file2` before `file10`? That is Explorer order (the default **Name sort**, option **Windows Explorer**). Digit groups compare as numbers. Settings → Behavior → **Name sort** → **Character by character** uses character order, where `file10` comes first. ### 33. Why did sort change inside a TV folder? Thumbnail and icon Name order in a marked media library is season then episode, not the raw filename. List and Details follow the normal folders-first and name-sort rules unless Media Metadata’s mix option applies to icon views. ### 34. How do I hide `node_modules`? The toolbar eye applies the view filter. Patterns are Settings → **View filter**. Search excludes are separate (Settings → **Search index**) and start with `node_modules`, `.git`, `.hg`, `.svn`, and `Thumbs.db`. ### 35. The extension is missing on shortcuts. Settings → Behavior hides the label suffix for `lnk` and `mfevirtual` by default. The file name on disk still has the extension. ### 36. How do I add a Details column? Right-click the Details header, or Settings → **Folder views**. Image, media, tag, generation, note, Git, and statistics columns exist. Some fill in after a background read (they show empty until then). Generation columns appear when the file has that metadata. ## Preview and images ### 37. How do I show or hide preview? **Ctrl+Shift+P**, or the panel control. **Open preview window** moves the same preview into its own window and hides the docked pane. ### 38. What can preview show? Images (including JFIF and HDR), video and audio, PDF, HTML and Markdown, extracted Office text, PowerPoint slides, calendar and email (`.ics`, `.eml`), 3D meshes, CHM, ZIP/7z/RAR/tar.gz, shortcuts, SafeTensors, Unity packages, and executables. Full list: [PREVIEW_EXTENSIONS.md](#src-docs-preview-extensions-md). ### 39. Why won’t this MKV play inside the pane? Chromium’s player is used for types it can play (MP4, WebM, MOV, and similar). MKV, TS, WMV, AVI, and similar offer **Open with default app** unless **Rich player (mpv)** is on and mpv can be started. A decode error does not automatically switch to mpv. ### 40. What is Keep playing? On a video, **Keep playing** opens **Now Playing**, which keeps that file playing while the preview follows whatever you select next. **Dock** returns playback to the preview when that file is still the preview target. Closing the window ends it. Deleting or moving the file stops it. ### 41. How do I edit an image? Select one editable image and press **Ctrl+E**, or use the editor command. On **Annotate**, draw a text box. It stays selected, with the same move and resize handles as a rectangle. Type in it, including **E**. **Escape** leaves the text box and brings the handles back; **Escape** again closes the editor. **Ctrl+S** still saves from that box. When the file has saved versions, **Undo last** in the editor top bar drops only the newest one and reloads the previous. The same action is **Undo last edit** on the **Version Control** menu. File-window keys such as **Backspace**, **Delete**, and **Ctrl+A** stay in the editor until it closes. Saves write the picture and keep up to four earlier versions in NTFS streams `VER_1`…`VER_4` on that file. Revert uses those streams. Zipping the file with a tool that drops ADS drops the versions. A context command that launches Photoshop on one image with versions asks whether to open the original or commit the newest edit into the file first. ### 42. The editor opened empty. That was a defect fixed for the 0.21.0 release. Update if you are on an older build. If a current build still opens empty, note the extension and the **About** version in a bug report. ### 43. Where do video thumbnail strips come from? A hidden sibling folder `!VIDTHUMB_CACHE` next to the videos. The context command is **Generate video preview** (one file) or **Generate video previews** (a selection). **Video thumbnail frame delay (ms)** is Settings → Behavior (default 300, range 50–2000), not the Preview page. ### 44. Why is the preview text cut off? Text preview stops at **text preview max bytes** (default 2 MB). Raise it under Settings → Preview. Word wrap is off until you enable it. ## Search ### 45. Does this use Everything? No. The query style is similar. The index is this app’s SQLite index of roots you add. A search that is not indexed walks the current folder. ### 46. How do I search only what I indexed? Open the toolbar search options and turn on **Search indexed roots**. That choice is remembered. Add the folder or drive under Settings → **Search index**. That settings page does not contain the checkbox. ### 47. How do I type a query? Toolbar box (**Ctrl+Shift+F**). Examples: `ext:png`, `size:>1mb`. **Ctrl+F** opens **Power Search**, the visual builder. Operators and date fields are in [SEARCH.md](#src-docs-search-md). ### 48. The search box stuck after I clicked the address bar. Leaving a search via the breadcrumb or address bar cancels the walk and clears the query so the box stays editable. If an old build revived the query, update. ### 49. Search results changed my view to Details. Current builds keep the view you had (thumbnails, icons, list, or Details). The view picker still works on the results. Details adds a Folder column, and the column headers sort those hits. ### 50. Can another program call search? Settings → **Advanced** → **Enable localhost search API**. It is off by default (port 8081, this PC only). It searches indexed roots. Leave it off unless you intend to use it. Do not publish the token or forward the port. ## Slideshow and camera looks ### 51. How do I start a slideshow? Settings → **Slideshow** → **Enable slideshow UI**. Then the toolbar and the folder command **Start Slideshow** appear. Until that switch is on, those controls stay hidden. The settings section itself stays visible. ### 52. What does Include subfolders do? Default on: the show walks child folders. Off: only the folder you started from. ### 53. How do I stop? Esc, Space, Enter, or click. The cursor hides after about two seconds of idle. ### 54. I categorized the wrong picture. Press `\`. That undoes the last categorize or delete still buffered in the show. ### 55. What are camera looks? Color, grain, and blur drawn on the slide only. The file is not modified. Settings → Slideshow → **Camera looks** is off until you turn it on. Frequency must be above 0, and at least one effect must be checked. **Camera looks…** edits the list, sliders, and optional custom shaders. The same position in the playlist keeps the same look when you step back. ### 56. Why did only some photos change? Frequency below 100% skips some indexes. A path filter skips paths that do not match. Empty filter means all paths. `AI` matches those letters anywhere. `\AI\` matches a folder whose name is `AI`. Crop mode shows the untreated photo. ### 57. The show got slower when looks are on. The slide is decoded and then drawn through the GPU. Dusty lens does much more work per pixel than the other built-in looks. Uncheck Dusty lens, or turn **Camera looks** off. The original file is unchanged. ### 58. The Camera looks window shows the effect, but the show does not. The window previews the selected effect even when the slideshow switch or the master **Camera looks** switch is off. The show needs **Enable slideshow UI**, **Camera looks** on, and frequency above 0. If the status says the slideshow skips this photo, the path filter excluded it. ### 59. Where is the categorizer map stored? Settings → Slideshow → **Mapping Manager…**. Rows are inside settings (`slideshow.categorizerMap`) and travel with export/import. An exported `.map` file is a copy; deleting the file does not clear the settings. ## Metadata, notes, statistics ### 60. How do I attach a note? Right-click → **Note…**. It is stored on the file as an NTFS stream, not as a sibling text file. Preview and the Details checklist columns can show it. Power Search understands `note:`, `todo:`, and `hasnote:`. ### 61. How do I set a custom icon on one file? Right-click → **Set icon…**. That is not File Tools → **Change Icon…** (the Windows icon change). Created and Modified times are restored after the write. ### 62. How do I see which folders use the most space? Select the folder → **Calculate Statistics**. The folder preview then includes a space map. Details Size can show the calculated total afterward. Shift+click is the variant that skips tagged paths. See [FOLDER_STATISTICS.md](#src-docs-folder-statistics-md). ### 63. What is user metadata? Settings → **Metadata** → **Enable** (off by default). You define field sets, bind them to folders, and edit values. Values are an NTFS stream `mfe_meta` on the item. Details columns and Power Search `meta.:` can read them. Guide: [USER_METADATA.md](#src-docs-user-metadata-md). ### 64. When do I see Raw parameters? When the prompt body is missing, or a negative-prompt section was present but not parsed. A successful parse hides it. ### 65. Will notes show on a FAT USB stick or a zip file? No. Alternate streams are NTFS. Copies that ignore ADS, and zip tools that store only the main bytes, drop them. ## Movies and TV ### 66. How do I turn on movie metadata? Settings → **Media Metadata** → Enable. Then right-click a movie or show folder → extract from Plex or download from the internet (TMDB or OMDb). You supply those credentials. They are settings fields; treat an export as private. ### 67. Where is the poster stored? On the folder as NTFS streams, not in a sidecar jpg you have to keep next to the video. Episode files use `SxxExx` titles when the show option is on. ### 68. Watched and genre filters disappeared after I switched folders. The last choice is remembered per library folder (up to 200 folders), not as one global filter. ## Scripts and AI ### 69. How do I run a script on this folder? Settings → **Scripting and AI** → **Enable scripting**. Toolbar **Scripts** → new script, or the context menu **Scripts**. Choose PowerShell, Python 3, cmd, or bash. Python 2 is not supported. **Stop** kills the run. Guide and examples: [SCRIPTS.md](#src-docs-scripts-md). ### 70. Does Ask AI read my files? No. The request is the task you describe and the script text. Paths and file bytes from the folder you are browsing are not uploaded. After you save, the script runs locally. ### 71. Where is the API key? In `%APPDATA%\MyFileExplorer\ai-secrets.json`, protected with the OS credential store. It is not in Settings export. Do not copy that file into an issue. ### 72. A global script has no folder. Where is the button? Each global script is its own toolbar button, using the same icon style as Quick Launch. ## Git ### 73. How do I enable Git? Settings → **Git** → **Enable Git integration**. Git must be installed (`git` on PATH, or **Git executable**). The app does not store your Git password. ### 74. I deleted `.git` and the buttons stayed. Current builds clear the cached status so the toolbar and Git preview tab go away. Update if an older build left `fatal: not a git repository` on screen. ### 75. Who decides commit rules and hooks? Git. This app starts Git and shows its output. Hook failures and authentication are Git’s. Use Git’s documentation for remotes, credentials, and rebase. ## Network and remotes ### 76. How do I reconnect a mapped drive? Expand **Network** in the tree and click the disconnected letter. You do not have to open Explorer first. [NETWORKS.md](#src-docs-networks-md). ### 77. How do I add SFTP? Settings → **Remote repositories** → enable, then add the host. Passwords are not included in settings export. The server’s own accounts and firewall are outside this app. [REMOTE_FTP.md](#src-docs-remote-ftp-md). ## Virtual folders ### 78. What is a Virtual Folder? A `.mfevirtual` file that lists paths. Opening it shows those items as a folder. Deleting inside it removes the reference, not the original file, unless you explicitly delete the target. [VIRTUAL_FOLDERS.md](#src-docs-virtual-folders-md). ### 79. Why doesn’t Explorer show the same folder? OS projection is optional and off. It needs WinFsp plus the projection service from the release. Settings → Behavior → **Virtual Folder OS projection**. Without that, only MyFileExplorer shows the collection. [VIRTUAL_FOLDER_PROJECTION.md](#src-docs-virtual-folder-projection-md). ## Undelete and the USN journal ### 80. How do I get back a Shift+Delete file? Settings → Appearance → **Show Undelete toolbar button** (off by default). Use the new tab-bar icon. Scan, then recover into a folder you choose. Files are written with their relative parent paths, not dumped into one flat directory. This is MFT recovery, not Recycle Bin restore. It can fail if the disk reused the space. It may ask for administrator approval. [UNDELETE.md](#src-docs-undelete-md). ### 81. What is Drive Properties → USN…? The NTFS change journal used to notice creates and deletes for the search index. Enabling or resizing it can ask for UAC. **Delete journal** forces a full volume scan and cannot be cancelled. Do not use it on a large disk unless you intend that scan. [SEARCH.md](#src-docs-search-md). ## Performance and safety ### 82. Thumbnails flash or the UI stalls while scrolling. Thumbnail work is queued so it should not freeze preview. A fix for scroll flashing in large thumbnail folders shipped in 0.21.0. Update if you still see the old flash, and include the folder size in a report. ### 83. Should I turn off hardware acceleration? Only when another program needs the GPU and this app is competing with it. Settings → **Advanced**. Restart. Turn it back on afterward; the interface is slower without it. ### 84. Is my folder uploaded anywhere? Normal browsing, preview, search, and slideshow stay on this PC. Ask AI sends only the script task you submit. Media metadata download contacts TMDB, OMDb, or your Plex server when you run that command. FTP/SFTP contacts the host you configured. Nothing else is a cloud drive. ### 85. Can I back up the app? Export settings from **About** for preferences, hosts (no passwords), and scripts (no API keys). The template catalog is in that file; the copies under `Templates\` are not, and neither are Quick Launch images. Separately back up files **with** NTFS streams if you use notes, covers, or statistics. Copying only `settings.json` does not copy notes. ## Failures ### 86. The app vanished on startup. Read `%APPDATA%\MyFileExplorer\logs\main.log`. Rename the app-data folder to `MyFileExplorer.bak` and start again to test a clean profile. See [troubleshooting.md](#src-docs-troubleshooting-md). Do not delete the `.bak` until you know you do not need the export. ### 87. Preview says the file is missing, but Explorer shows it. You may be in a search result or a virtual folder whose target was moved. **F5**. If the path was a network share, reconnect it from **Network**. ### 88. I want slideshow captions drawn on the photo. Where is that switch? The public Slideshow settings do not include that control. If you do not see it, it is not part of the supported UI. Do not invent a settings key or a hidden file to turn it on. Camera looks are the display treatment that is documented, and they do not burn text into the file. ### 89. Who do I tell if this is a bug? https://github.com/dobrado76/MyFileExplorer/issues — version from **About**, what you expected, the exact message, and a short log excerpt with personal paths removed. Do not attach settings or API keys. If `logs\main.log` is empty, the app may have started after the file passed 2 MB: that launch empties it. ### 90. Ctrl+Z is empty after I restarted. Where did undo go? Nowhere to restore. Undo is a memory stack for the current run (at most 30 operations). It is not written to disk. A Recycle Bin file is still in the in-app bin. A Shift+Delete is not on the stack; Undelete is the separate NTFS scan, and it can fail. ### 91. How do I rename many files at once? Select them, then right-click → **Power Rename…**. Search and replace can be literal, DOS `*` / `?`, or regex. **Advanced options** add case, numbering, dates, and similar transforms. Apply renames the selected names only. It does not open folders and rename what is inside. **Ctrl+Z** can reverse that batch while it is still on this session’s undo stack. [POWER_RENAME.md](#src-docs-power-rename-md). ### 92. How do I compare two folders? Use a two-pane layout. The centre rail is there whenever layout 2 is active. **Compare** classifies the two folders by relative path. The single-arrow copy actions work without a compare. Sync uses a reviewed plan. This is not Git and not a cloud sync. [PAIRED_FOLDERS.md](#src-docs-paired-folders-md). ### 93. How do I create a file from a template? **New** → **From Template**, or the same command on the context menu. **Manage Templates…** adds a file, sets the pretty name (menu label and default filename), and reorders the list. Cap 40. The copies live in `%APPDATA%\MyFileExplorer\Templates\`. Settings export keeps the catalog, not those file bytes. ### 94. How do I check for an update? Settings → **About** → **Check for update**. **Folder or URL** is the updates source: the default GitHub Releases URL, or a local folder of installers. The installer name is `MyFileExplorer-x.y.z.exe`. When a newer build is listed, **What's new** loads the release notes. [BUILD.md](https://github.com/dobrado76/MyFileExplorer/blob/main/docs/BUILD.md). ### 95. Can Windows open folders in MyFileExplorer instead of Explorer? Only if you turn on Settings → **Windows integration** → **Redirect folder openings to MyFileExplorer**. It is off until you opt in. It is per-user, experimental, and not part of a settings export. **Restore previous folder-opening configuration** puts the old verbs back. It is not a full Explorer replacement. [WINDOWS_SHELL_REDIRECT.md](#src-docs-windows-shell-redirect-md). ### 96. Can I use thumbnails or Details, and sort by date, while search results are showing? Yes. Change the view picker while the results are open. Thumbnails, icons, list, and Details all show the hits. In Details, click a column header — **Date modified**, **Date created**, Size, or Name — to sort the hits. That choice is the folder’s view, so it stays after you clear the search. Details also shows a Folder column for the parent path. --- # Roadmap This file separates what ships from what does not. ## Shipping Whatever is in the installed build and described in the user documents (preview, search, slideshow, scripts, Git, virtual folders, undelete, and the rest of the doc index) is implemented. Settings → **About** is the version of the build you are running. This repository’s `package.json` is **0.22.0**. The newest dated section in `CHANGELOG.md` is **0.22.0** (2026-10-23). The **Unreleased** section is empty. There is no 0.21.1 or 0.21.2 section. Do not invent patch notes between 0.21.0 and 0.22.0. ## Not a commitment `docs/plans/` holds design notes. They are not a public roadmap and not features in the app. Do not follow them as instructions. ## Explicit non-goals - Full Windows Explorer parity. - Hosting Explorer shell extensions or cloud-provider shells. - macOS, or Linux as a primary supported platform. Optional FTP/SFTP, Git, scripts, media metadata, user metadata, slideshow, OS projection, and the Windows folder-open redirect are real but **off or experimental** until you turn them on. Their own documents describe the limits. --- > **Version stamp:** A 0.21.0 line in this section is when the page was last stamped. > The repository package version is 0.22.0. The newest changelog section is 0.22.0 (2026-10-23). There is no 0.21.1 or 0.21.2 section. Do not invent one. > The running build is Settings → About. Do not quote 0.21.0 as the user's version. # Preview & metadata **Version:** 0.21.0 The preview pane shows a type-appropriate visualization plus a **metadata field list** that grows based on what can be parsed. Missing fields are omitted (never show empty placeholder rows for AI params). Short File-tab values (duration, bitrate, channels, Yes/No, …) share a row; titles, comments, and other long values stay full-width boxed rows. **Extension catalog:** [PREVIEW_EXTENSIONS.md](#src-docs-preview-extensions-md) — every extension routed by the preview pane, with notes per type. **Movie / TV overlay (D50):** when Settings → Media Metadata is on and the file/folder has stored streams, a portrait poster + title sit above the player. **Show/movie folders** use header tabs **Media | Folder** (**Media** by default), same pattern as Git | Folder: **Media** is the poster hero + cast/synopsis; **Folder** is the directory / folder-statistics card (D66). Episode and other media **files** still use **Media** / **File** tabs under the player when both movie/TV details and extracted file metadata exist. Click the poster for the stored full-size cover. With no file selected, the pane previews the **current folder** so a show folder keeps its card until you click an episode. Episode files keep `!VIDTHUMB_CACHE` icons; the show cover is used in preview when the episode has none. Guide: [MEDIA_METADATA.md](#src-docs-media-metadata-md). **Git repository root (D64):** when Settings → Git is enabled and the preview target is the **repository root** folder, the pane header shows **Git | Folder** tabs (**Git** by default). **Git** is the Git Graph–style commit history (toolbar + row context menu). **Folder** is the same directory / folder-statistics card used for any other folder (D66). If a folder is both a Git root and a media title, **Git | Folder** wins. Guide: [GIT.md](#src-docs-git-md). **Folder statistics preview (D66):** when **Calculate Statistics** has written `FolderStatsPreview` ADS, selecting that folder shows a rich folder card. Full guide (plain click vs **Shift+click** skip tagged, map interaction, settings): [FOLDER_STATISTICS.md](#src-docs-folder-statistics-md). On a Git repo root, open the **Folder** tab ( **Git** remains default). On a media-tagged show/movie folder, open the **Folder** tab ( **Media** remains default). On a **volume root**, the free-space pie stays and the same card / map appears below when tagged. Preview **only reads** ADS — it never starts Calculate. Changing **Folder space map max files** requires a new Calculate (plain click). ### Docked or detached preview (not both) The docked pane header shows **Open preview window**. That opens a peer `BrowserWindow` with the **same** live preview (visualization, File/VIDEO tags, media metadata, notes, user metadata, details) and **hides the docked pane** (same as Panel / Ctrl+Shift+P). Only one *preview* is visible. Playing video resumes at the docked time (Chromium `currentTime` or mpv `time-pos`), not from 0 — capture happens **before** the docked Rich player overlay is torn down; mpv IPC skips event lines when reading `time-pos`. **Now Playing (sticky player):** on a video, **Keep playing** opens a separate **Now Playing** window that owns Chromium or Rich Player for that file and **does not** follow selection. Docked preview keeps following selection so you can browse; the same file shows a stub instead of a second player. **Dock** returns playback to the preview pane at the current time **only when that file is already the preview target** (no forced re-select or tab jump — Keep playing stays open otherwise). Repeated Keep playing → Dock keeps the real offset (each mpv session uses its own IPC pipe; a stale window-close must not wipe the next session). Title-bar Close ends the session. Delete/move of the playing path stops it. Not a mini-bar. Plan: [plans/NOW_PLAYING.md](https://github.com/dobrado76/MyFileExplorer/blob/main/docs/plans/NOW_PLAYING.md). **Detached / Now Playing chrome:** the video control bar **auto-hides after ~3 seconds** without pointer activity in that window and returns on mouse move / click / wheel (including over the Rich player overlay). Docked preview keeps controls always visible. **Dock** (window header) closes the window and **shows the docked pane again**. The toolbar Panel button and Ctrl+Shift+P do the same while the window is open. Closing the window with the OS title-bar button also restores the pane. A second Open focuses the existing window. The **docked pane layout is unchanged** (stacked: visualization, then metadata, then details). **Detached layout:** when the preview *window* is **wider than it is tall**, that window is two columns — visualization on the left (image / video / text / **Space usage** map / …), metadata / media info / folder-statistics details / notes / details on the right. Drag the splitter to resize; the last right-column width is remembered (`settings.previewWindowSplitPx`, default 42% until you drag). A tall detached window stays stacked (full folder-statistics card, same as the docked pane). **Zen mode** (detached header, remembered in `settings.previewWindowZen`): hides the kind label, file details strip, metadata fields, warnings, and extra actions. The OS title bar and a slim header with Dock + Zen stay; the rest is just the visualization. **Word wrap** (header button on text / Markdown / HTML, remembered in `settings.previewTextWordWrap`): wraps long lines in the source view. Off by default (horizontal scroll). Same control in the docked pane header and Settings → Preview. Hiding the docked pane (toolbar Panel / Ctrl+Shift+P, `splitters.previewCollapsed`) does not close or freeze the window. Image editor and version Drop stay in the docked pane (dock first). Geometry (`x` / `y` / `width` / `height` / `maximized`) is remembered in `settings.previewWindowBounds` and is **not** auto-reopened on launch. First ever open (bounds still `null`) is **90% of the primary work area**, centered. Settings export/import strips that key with the other window-like geometry. The two-column splitter (`previewWindowSplitPx`) is a preference and **does** round-trip on export. Closing the main app closes the preview window with it. --- ## PreviewModel (IPC) ```ts type PreviewModel = { path: string kind: | 'image' | 'text' | 'markdown' | 'html' | 'spreadsheet' | 'document' | 'rtf' | 'audio' | 'video' | 'pdf' | 'binary' | 'executable' | 'directory' | 'shortcut' | 'archive' | 'chm' | 'font' | 'model3d' | 'missing' mediaUrl?: string // protocol URL for display (images, PDF, fonts, CHM topic, MSI icon) textSample?: string // utf-8 sniff / markdown source, truncated htmlBody?: string // Word / RTF HTML fragment (renderer sanitizes) sheets?: { name: string; rows: string[][] }[] // spreadsheet preview archiveTree?: ArchiveTreeNode[] // ZIP / 7z / RAR / TAR / Unity / APK / MSI / ISO / IMG / CHM TOC archiveFormat?: 'zip' | 'unitypackage' | '7z' | 'rar' | 'tar' | 'targz' | 'apk' | 'msi' | 'iso' | 'img' fields: PreviewField[] // ordered for display warnings?: string[] // e.g. "truncated", "parse incomplete" } type ArchiveTreeNode = { name: string path: string // inside-archive path with `/` kind: 'file' | 'dir' size?: number // uncompressed bytes when known children?: ArchiveTreeNode[] } type PreviewField = { id: string // stable key e.g. "gen.prompt" label: string // UI label value: string // display string (may be long) group?: 'file' | 'image' | 'generation' | 'shortcut' | 'executable' | 'audio' | 'video' | 'other' mono?: boolean // use monospace / multiline block copyable?: boolean } ``` --- ## Always-on file fields (`group: file`) When available from `stat`: - Name - Type / extension - Size (human) - Date modified / created (if available on Windows) - Read-only / hidden attributes (if cheap) - Dimensions (images / PSD — shown in the bottom details strip) Details strip layout: Name (+ Dimensions when present), then a responsive pair — **Type / Size** beside **Date modified / Date created** when the pane is wide enough; stacks on narrow panes. Path is omitted (redundant with Name for browsing). --- ## Images **Display:** image via protocol URL (respect EXIF orientation when feasible). Uses as much vertical space as possible above the details strip (`object-fit: contain`). `.tif` / `.tiff` / `.tga` / `.hdr` (Radiance RGBE) are rasterized to cached WebP (Chromium cannot paint those formats); thumbs and slideshow use the same path. HDR is Reinhard-tonemapped for display (not a linear light viewer). **Edit:** pencil button in the preview header, context menu **Edit image…**, or **Ctrl+E** (single editable image selected; otherwise ignored) opens Filerobot (crop / adjust / finetune / filters / annotate / resize). Edits stay **in memory** for the session — rotate / filter / annotate then crop (and undo/redo) without Save between tools. Entering **Crop** or **Remove** after any in-session change bakes the canvas into a new in-memory source and remounts (Filerobot’s Crop tool otherwise drops live rotation and other design). Crop settings stay stable across host re-renders so handle drags are less likely to snap back; Resize ratio lock uses the **current** (cropped) Width/Height, not the original file. Disk is only written on **Save** / **Save as…**. **On NTFS:** **Save** writes tip ADS `VER_n` (max 4; default stream stays pristine). Context menu **Version Control** (when history exists): **Undo last edit** / Commit / Revert, then **Original** / **Version k** to preview that stream (D27). The editor top bar shows **Undo last** for the same tip drop. An annotation text box stays selected and uses the same handles as a rectangle; letters type into it, and Escape leaves the box before it closes the editor. While previewing a version, the dim banner has **Show current** and **Drop** (tooltips). Slideshow always uses the tip. Thumbnails for tip-edited images invalidate when the tip stream changes even if `$DATA` mtime/size did not (D10). **On non-NTFS:** Save overwrites the file in place (no version streams — FAT/exFAT have no ADS). **Copy/move to a non-ADS volume:** destination gets the tip edit as the file body (edits kept; original/history dropped). **Save as…** writes a new file via the system save dialog with no version history. Not for SVG/PSD. **Generation metadata on edit (D27):** Filerobot exports pixels only. After re-encode, MyFileExplorer copies generation embeddings from the metadata source (in-place Save: pristine `$DATA`) onto the written bytes so preview can parse them again — PNG `parameters` / `Comment` / Comfy `prompt`+`workflow`, JPEG COM, EXIF UserComment / XPComment. Same-format Save keeps native channels; cross-format Save as bridges gen text into the destination channel. Every `VER_n` tip gets the original gen meta; **Commit** copies tip bytes as-is (so a successful Save is what makes Commit safe). If re-attach fails, Save still succeeds and a soft warning is shown. **Tradeoffs (NTFS):** Explorer / Open with default app still see the default stream (original) while MFE preview/thumbs/slideshow show the tip. If another app overwrites the default stream while `VER_*` exist, MFE keeps showing the tip until Revert or Commit — no automatic merge. ZIP compress typically drops ADS. **Image fields:** dimensions in the file details strip. Generation metadata (when present) still appears in the scrollable content area. ### Photoshop (`.psd`) - Rasterized via `ag-psd` (embedded JPEG thumbnail preferred; else composite `imageData` → PNG with Sharp). No `node-canvas`. - Cached under `userData/psd-preview/` (session temp, emptied on start/quit); also feeds icon thumbs. - Requires an embedded preview/composite (Photoshop “Maximize Compatibility”). PSB / some color modes unsupported. ### Generation metadata (`group: generation`) Parse **best-effort**. Support grows over time; v1 targets the formats below. #### A1111 / Forge-style PNG Common pattern: PNG `tEXt` / `iTXt` chunk key `parameters` (sometimes `Comment`). Typical body: ```text {prompt} Negative prompt: {negative} Steps: 20, Sampler: …, CFG scale: 7, Seed: 123, Size: 512x768, Model hash: …, Model: … ``` Extract when present (from PNG `parameters`/`Comment`, or JPEG/WebP EXIF UserComment / XPComment / COM — Explorer’s **Comments** field): | Field id | Label | | ------------------- | ----------------------------------- | | `gen.prompt` | Prompt | | `gen.negative` | Negative prompt | | `gen.steps` | Steps | | `gen.sampler` | Sampler | | `gen.scheduleType` | Schedule type | | `gen.cfg` | CFG scale | | `gen.seed` | Seed | | `gen.size` | Size | | `gen.model` | Model | | `gen.modelHash` | Model hash | | `gen.vae` | VAE | | `gen.denoising` | Denoising strength | | `gen.setting.*` | Any other `Key: value` pairs | | `gen.rawParameters` | Raw parameters — only when the prompt or negative prompt did not parse | Keep the raw text when the chunk exists but the prompt body is missing, a `Negative prompt:` section was not split out, or the block does not parse as parameters at all. When prompt and negative both come out, the raw blob is omitted. #### ComfyUI PNG Often embeds workflow JSON in `tEXt`/`iTXt` keys such as `prompt` and/or `workflow` (exact keys vary by save path). Extract when present: | Field id | Label | | ----------------------- | -------------------------------------------------------- | | `gen.comfyPromptJson` | Comfy prompt (JSON) | | `gen.comfyWorkflowJson` | Comfy workflow (JSON) | | `gen.comfySummary` | Short summary if we can derive model/sampler nodes later | v1: show pretty-printed JSON in monospace (with size cap + “open full in viewer”); deeper node summary is Phase 10+. #### Other - JPEG/WebP: EXIF UserComment / XPComment / ImageDescription and JPEG COM markers; if the text looks like A1111 parameters (ComfyUI savers), run the same decomposed parser (prompt, negative, Steps, Sampler, Schedule type, VAE, …) - `.json` sidecar next to image (`name.json`) — optional later; not required for v1 --- ## Text - UTF-8 / UTF-16 LE sniff; if binary → `kind: 'binary'` - Show first `textPreviewMaxBytes` bytes (default 2 MiB; Settings → Preview) - **Syntax highlighting** in the renderer (`highlight.js`, selective grammars) for common types: HTML/XML, JSON, TS/JS, YAML, CSS/SCSS, Python, shell/PowerShell (`.ps1` / `.ps`), batch (`.bat` / `.cmd`), VBScript (`.vbs`), INI/TOML-ish, SQL, C-family, Rust, Go, PHP, Ruby, Lua, Unity ShaderLab/HLSL (`.shader`), etc. Unknown extensions stay monospace plaintext. - Extensions: `.txt`, `.json`, `.yaml`, `.yml`, `.wlt` (YAML), `.ffs_gui` (XML), `.log`, `.css`, `.js`, `.ts`, `.ics` / `.ical` (iCalendar agenda + Raw source), `.eml` (email headers + body; remote images blocked), … (`.md` / office formats use dedicated kinds below) --- ## Markdown (`.md`, `.markdown`) - `kind: 'markdown'` with raw `textSample` - Renderer: GFM via `marked`, sanitized with DOMPurify before inject - **Preview / Raw** toggle (default Preview); Raw shows syntax-highlighted source --- ## HTML (`.html`, `.htm`) / SAMI (`.smi`, `.sami`) - `kind: 'html'` with raw `textSample` (same text-preview byte cap as other text) - Renderer: sanitized HTML inject (DOMPurify; scripts/iframes/forms forbidden) - **Preview / Raw** toggle (default Preview); Raw shows syntax-highlighted source - Relative assets / external scripts are not loaded specially — best-effort document preview - **SAMI** (`.smi` / `.sami`): decode via `charset=` / `lang:kr-KR` / `KRCC` (typically EUC-KR). Do not assume UTF-8 — Korean rips mojibake otherwise. Encoding field on the metadata strip. --- ## Spreadsheet (`.xls`, `.xlsx`, `.xlsm`, `.xlsb`, `.ods`; `.csv` best-effort) - Parsed in main with SheetJS (`xlsx`); preview shows up to 2000 rows × 80 columns × 32 sheets - Renderer: sheet tabs + scrollable HTML table --- ## Word (`.docx`, `.doc`) - `.docx` → HTML via `mammoth`; `.doc` → plain text via `word-extractor` then simple HTML - `kind: 'document'`, `htmlBody` sanitized in renderer --- ## PowerPoint (`.pptx`, `.ppt`) - `.pptx` → approximate **slide layout** in the renderer (`pptSlides`: positioned text + rasters from `ppt/media` via slide/layout/master rels). Does not use the low-res `docProps/thumbnail`. Not a full PowerPoint render (charts/SmartArt/WMF/EMF/animations omitted). Cached images under `userData/pptx-preview/` (session temp, emptied on start/quit) - `.ppt` (legacy OLE) → best-effort UTF-16LE text scrape; incomplete vs native PowerPoint - `.pptx` uses structured slides (not sanitized HTML), up to 80 slides. `.ppt` still uses the document HTML surface; truncated at ~1 MiB --- ## RTF (`.rtf`) - Lightweight RTF → text/HTML in main (`kind: 'rtf'`); not a full layout engine - Renderer reuses the HTML document preview surface --- ## Audio / video - Inline Chromium `