Import your photos, lay them out, find them, look at them. That is all this app does.
On first launch, use “Add a folder” at the bottom of the left pane: type the folder that holds your photos and press “Add”. You can also pick one from the list of drives.
Scanning starts immediately, and a grid ordered by date builds up. The grid stays live while the scan runs — rows appear as they are ready.
The second launch is much faster. pictkura reads the change journal the Windows file system already keeps (the USN journal) and only looks at the files that changed since last time. The ⚡ readout at the top right shows how much processing it skipped.
Press “Import from USB” at the top.
| Control | What it does |
|---|---|
| Include subfolders | Picks everything up even when the card has date folders under DCIM. Choosing a folder scans all the way down by default |
| Hide already imported | Hides what is already in your library. The check runs through the same code as the import itself, so the “done” badges never disagree with reality |
| Destination | Set any folder from “Change” at the bottom. If it is unset, you are asked when the import starts |
| Whole folder | Imports the selected folder in its entirety |
While copying you get a progress bar, an estimated time remaining, and the photo currently being copied. When a copy finishes, sizes are compared to verify it.
pictkura adds itself to the Windows AutoPlay choices that appear when you insert a USB drive or an SD card. This is on by default, but it never starts on its own — the import wizard opens on that drive only when you choose it. Note that the entry itself is worded in Japanese.
To turn it off, clear the “When you insert a USB drive or SD card” checkbox
in Settings ⚙. It disappears from the choices right away.
That is also the reliable way to remove it before uninstalling.
Uninstalling with the installer removes it automatically, but only
for the user who ran the uninstall (the setting is per user).
The portable build is just a folder you delete, so run
pictkura.exe --unregister-autoplay before deleting it.
If this PC already has a default action, inserting a card shows no choices at all. Windows performs whatever was decided (for example “Open folder to view files”) without asking. pictkura is registered as a candidate, but nothing ever asks.
Check and change it under Settings → Bluetooth & devices → AutoPlay. “Choose AutoPlay defaults” lists “Removable drive” and “Memory card”. Pick “Ask me every time” if you want to choose on every insert, or pictkura’s own entry if you always want pictkura. That entry reads 「pictkura で写真を取り込む」 — it is worded in Japanese whatever your Windows language is, so look for the pictkura icon and the name in brackets. If that list shows it at all, the registration is working.
If you would rather see the choices once without changing the default, right-click the drive in File Explorer and choose “Open AutoPlay”: the picker that should have appeared on insert opens on the spot. In the Windows 11 right-click menu it lives under “Show more options” (or Shift+F10).
A .xmp written by a raw developer (develop settings, ratings, keywords) sits
next to the photo under the same name. pictkura carries those along:
leaving one behind looks, later on, exactly like losing all your edits.
This applies when importing, when copying or moving to a folder, and when
sending a photo to the recycle bin.
| Extension | Written by |
|---|---|
.xmp | Adobe (Camera Raw / Lightroom / Bridge), darktable, digiKam, Photo Mechanic |
.aae | Photos on iPhone / iPad |
.dop | DxO PhotoLab |
.pp3 | RawTherapee |
.on1 | ON1 Photo RAW |
Anything else — video thumbnails (.thm), low-resolution proxies
(.lrv), PlayMemories Home bookkeeping (.modd,
.moff), voice memos (.wav) — is
not carried by default, because the camera can regenerate it or it belongs
to another application. You can add what you need to the settings file (see “Where settings and
data live”), or empty the list to carry nothing at all.
Write it under [import] in pictkura.toml.
When the line is absent the five defaults apply, so add it only if you want
something different.
[import]
# also carry voice memos (.wav)
sidecar_extensions = ["xmp", "aae", "dop", "pp3", "on1", "wav"]
# carry nothing
# sidecar_extensions = []
If you shoot RAW+JPEG (IMG_0001.CR3 and
IMG_0001.JPG), the pair lands in the same date folder even when only
one of the two carries a capture time (the other follows it). Without this the pair
would be split across folders and could no longer be matched up. If neither file carries a
capture time, each falls back to its own modification time.
When you send only one half of the pair to the trash, a sidecar that is tied
to the photo by name alone (IMG_0001.xmp) stays
behind: with a same-named photo still there, which one it belongs to cannot be
decided (Lightroom writes .xmp for raw files only). A sidecar that carries the
full file name (IMG_0001.CR3.xmp) belongs to that one photo, so it moves with it.
⚙ (Settings) → “Import folder structure”. Where photos end up is hard to change later, so it is worth deciding first. There are nine common layouts to choose from.
| What you can write | What it becomes |
|---|---|
{year} | four-digit year (2026) |
{month} | two-digit month (08) |
{day} | two-digit day (13) |
/ | a folder level |
As you type, the folder name you will actually get is shown right there.
Writing {year}nen/{month}gatsu-{day}nichi, for instance, gives
2026nen/08gatsu-13nichi/.
If you keep the year folders yourself, point the destination at that year’s
folder and choose 2026-08-16/ (no year level) or 08/2026-08-16/.
Only date folders are then added underneath.
Folder names are built year-first in every language.
That is so sorting by name sorts by time, which is the usual convention for photo
tools (Immich defaults to Year/Year-Month-Day, and every dated folder
format Lightroom Classic offers starts with the year). Dates shown on screen follow
your language; dates in folder names follow the sort order.
.. (move to the parent folder), absolute paths, and characters that are not
allowed in file names are dropped automatically. Whatever you write,
nothing is ever written outside the destination.
The date that picks the destination folder during an import comes from EXIF (the container, for videos), then from the file name, then from the other half of a RAW+JPG pair, then from the file's modification time — and if even that is unusable, from the day of the import itself. It never asks the OS or your library: at import time there is no library entry for the file yet.
The list below is how the date is decided once the photo is in your library, for the grid and the viewer. The first of these that exists is used.
2024-01-01 12.34.56.jpgScreenshots and images saved from social apps usually carry no EXIF, and modification time alone files them under “the day you saved it”. When the name carries a date, that wins, so they land on the right day.
When pictkura can make no picture for a file — a RAW with no usable preview, say — a date already recorded for it comes third in the list, ahead of the file name and the modification time, unless what is recorded is only that modification time, which means nothing has been read yet. That matters because a file that ends up with no size at all is looked at again on every startup, so a pass that reads nothing must not erase a date that was read before.
Use the search box at the top, or the command palette with Ctrl + K.
| What you type | What it means |
|---|---|
okinawa | Substring match on file name, folder name and camera name. Languages that are not written with spaces match in the middle too, so 「旅行」 finds 「沖縄旅行」 |
camera:α7 | Narrow by camera (the same as “Cameras & media” in the left pane) |
folder:trip | Narrow by folder name |
2019-08 2019/8 2019-08-11 | Narrow by capture date. Just typing digits, such as 2019, is treated as text, not a date — it cannot be told apart from a file name |
year:2019 | Narrow to a single year |
★ | Favorites only |
⚑ pick: | Picked photos only (a separate shelf from ★) |
kind:raw type:video | Filter by kind (the same as “Kind” in the left pane): photo, raw, video |
All terms are ANDed. The order is fixed: newest capture date first.
Click a tile to open the full-size viewer.
| Key | What it does |
|---|---|
| ← → | Previous / next photo (same for videos) |
| P / U | Pick (flag it ⚑) / undo the judgement on this photo (clear ⚑ and ✕). By default this moves on to the next photo; Settings → “When you view a photo full screen” turns that off |
| X | Reject it (✕). Nothing is deleted when you press it — rejected photos go to the trash together when you close the viewer |
| Space | Start or stop the slideshow. On a video, play / pause |
| I | Capture details (camera, lens, aperture, shutter, ISO, GPS) |
| F11 | Full screen |
| Esc | Close |
| ? | Show the keyboard shortcuts (works in the grid too) |
Right-click for “Open”, “Open with another app…”, “Show in folder” and “Delete (move to trash)”. An editing app you pick once is remembered and appears in the menu from then on.
Deleting always goes through the Recycle Bin. The app never removes a file outright.
Hover a tile and click the circle in its corner, or Ctrl + click it (⌘ on macOS), to start selecting. A bar appears at the top of the window with what you can do to the selection.
| Action | What it does |
|---|---|
| The circle, or Ctrl + click | Add or remove one photo |
| Shift + click | Select everything between the tile you clicked last and this one. Days you have not scrolled to yet are included |
| Click a date heading | Select that whole day. Click it again to unselect it |
| Ctrl + A | Select everything the current search and ★ / ⚑ filter match |
| Esc | Stop selecting |
While something is selected, a plain click toggles a tile instead of opening the viewer. From the bar you can add or remove ★ for the whole selection, copy or move it to a folder you pick, or move all of it to the Recycle Bin in one go. It asks before deleting.
The ⚑ that P puts on a photo is a separate shelf from ★ favourites.
★ is “a photo I want to come back to”; ⚑ is “the one frame I keep out of this burst”.
Sharing one mark would fill your favourites with the leftovers of every culling session.
“⚑ Picked” in the sidebar lists what you picked, the search box takes
⚑ (or pick:), and the selection bar can pick or unpick a whole
selection at once.
Press X in the viewer and the photo becomes a rejection candidate. No file moves at that moment — the photo dims in the filmstrip below, and a “✕ 3” chip next to the caption counts them. Click the chip to look them over at any time, and press U if you change your mind.
When you close the viewer (Esc, a click outside the photo, or the ✕ at the top right) with candidates still marked, a confirmation screen opens. It shows every marked photo as a thumbnail: press “Keep” on the ones you want back, then “Move N to trash” to move the rest in one go. They go to the OS trash, so you can restore them later — restored files are picked up by the watcher and come back to the library (★ favourites and ⚑ picks have to be set again).
“View the selection” in the bar opens the viewer on just those photos. ← → stay inside the selection, and the counter in the corner counts the photos you picked out. To choose one frame out of a burst, select the burst, come in here, and walk it with P and U.
These put the selected files straight into the folder you pick, without date subfolders —
handy for handing a few photos to someone, or filling a USB stick. A file that is already
there — same name, size and timestamp — is left alone, so writing the same photos to the
same folder again adds nothing; a different file that happens to share a name gets
-1, -2 appended.
Moving takes those photos out of the library. They leave their current place, disappear from the grid, and their ★ / ⚑ marks are not carried over. pictkura asks first. Moving to another drive copies the file and then sends the original to the Recycle Bin — the app still never removes a file outright.
Files that only exist in the cloud are downloaded first, because writing them out has to read them — that applies to moving too, even within the same drive. See 8. Files that only exist in the cloud.
The selection follows what is on screen. Changing the search or the ★ / ⚑ filter, or switching to the calendar, clears it — so a bulk action never reaches photos you cannot see. Deleting still goes through the Recycle Bin.
| Format | Grid | Viewer | Notes |
|---|---|---|---|
jpg jpeg | ✅ | ✅ | Decoded while downscaling, so even large photos are quick |
png webp | ✅ | ✅ | |
avif | ✅ | ✅ | Decoder is bundled; no OS extension needed |
heic heif hif | ✅ | ✅ | The iPhone default. Pixel decoding is left to the OS (see below) |
bmp gif tif tiff | ✅ | ✅ | TIFF is re-encoded to JPEG for display |
svg | ✅ | ✅ | Drawn from the original, so zooming never degrades it |
No demosaicing. pictkura pulls out the display JPEG the camera wrote for its own rear screen. That takes a few milliseconds per file, and the colours are the camera’s own rendering.
| Format | Grid | Full screen | Notes |
|---|---|---|---|
cr2 cr3 nef nrw arw raf orf rw2 pef srw dng rwl 3fr x3f kdc | ✅ | ✅ | Uses the camera's own display JPEG, at or near full resolution. Includes Apple ProRAW (DNG) |
crw srf sr2 mrw erf dcr iiq mos | ✅ | ⚠️ | Older bodies embed only a small preview (160×120 to 640×480 on the files we tested), so the grid is fine but a full-screen view is soft |
raw | ⚠️ | ⚠️ | The two we tested (Panasonic DMC-LX1, DMC-FZ8) carry no preview at all, so only a frame appears. The size comes from the sensor borders and the date and camera from EXIF, so they still sort by date and show up in the camera filter |
fff (Hasselblad) | ⚠️ | ⚠️ | The H5D-40 file we tested carries no preview at all, so only a frame appears |
ptx (Pentax) | ? | ? | Recognised, but we could not obtain a real file to check |
| Blackmagic CinemaDNG | ⚠️ | ⚠️ | Carries no preview at all |
| Format | Grid | Plays in app | Notes |
|---|---|---|---|
mp4 m4v mov webm | ✅ | ✅ | Codecs depend on the OS (HEVC — see below) |
avi mts m2ts mkv 3gp wmv mpg mpeg | ✅ | ❌ | Use “Open in default app” to play |
Appearing in the grid is the same on every platform. What changes is whether a
picture comes with it: the ✅ in the grid column above is what was checked on Windows, and
even there the picture is the OS's answer rather than ours. Grid thumbnails are borrowed from
the OS, so a container is
covered exactly as far as the OS can open it. On Windows that is the Shell, the same mechanism
Explorer uses: .avi and HEVC .mov were measured coming back with a
frame, .m2ts has never been checked, and anything the OS has no handler or codec
for comes back empty. That HEVC measurement was taken on a machine with the paid extension
described below installed; it was never tried without it.
AVFoundation on macOS answers only for what it can open — mp4
and mov were measured returning a real frame, with H.264 and with HEVC
(hvc1, the fourcc an iPhone writes), though those HEVC samples were re-encoded by
macOS itself rather than written by a phone. .avi was
measured returning nothing. Anything not named here is untested on both: a picture is
possible, not promised. Linux has no route at all.
Duration, dimensions and capture time come from the container header for mp4,
m4v, mov and 3gp — not a single byte of pixel data is
read. Note that webm is not among them, despite sitting in the first row
above. The other containers have nothing but the Windows Shell to fall back on — measured with
a synthetic .m2ts, which came back with both duration and dimensions; the rest
were never checked.
On macOS and Linux those containers show no duration or dimensions, and the
date falls back to the file name or the modification time.
On Windows, “Pictures” points at OneDrive by default, and after a while much of what is in it becomes “online-only”: the real file lives in the cloud and all you have locally is a marker.
pictkura never downloads them on its own. Installing the app will not quietly pull gigabytes over your connection.
A few seconds after it starts, pictkura asks once whether a newer version exists. If there is one, a quiet line naming the new version appears at the bottom of the window; pressing it opens the download page in your default browser. The app never replaces itself.
This is the only outbound connection the app makes. All it sends is “pictkura version X is asking”; it sends no photos, no file names, and no folder paths. All it receives is the name of the latest version. It asks at most once a day, and if it cannot reach the network it fails silently, without showing an error.
If you would rather it did not, turn off Settings → About pictkura → “Check for updates at startup”. With that off, pictkura never reaches the network at all — and you can still press “Check for updates” in the same place to ask once, right then.
| Subject | Detail |
|---|---|
| HEIC / HEVC need OS components on Windows | The HEVC decoder is not bundled — patent licensing makes that impractical, so pictkura uses the one the OS has. On Windows that means installing “HEIF Image Extensions” (free) plus “HEVC Video Extensions” (paid, about a dollar) to decode the pixels; the app tells you when one is missing. On macOS there is nothing to install — ImageIO and the HEVC decoder ship with the system |
| Video thumbnails go only as far as the OS can open the container | On Windows the Shell provides them — .avi and HEVC .mov measured working, .m2ts never checked, anything the OS has no handler or codec for comes back empty. macOS shows what AVFoundation can open — mp4 and mov measured working with H.264 and HEVC (hvc1) samples, .avi measured empty, every other container untested. Linux has no route at all |
Duration and dimensions outside mp4, m4v, mov, 3gp | Those four are read straight from the container header. The rest rely on the Windows Shell (measured with a synthetic .m2ts only); on macOS and Linux they show no duration or dimensions (the date falls back to the file name or modification time) |
.m2ts / .avi do not play in the app | The browser engine cannot handle those containers. They still appear in the grid |
| A RAW that declares its size nowhere shows none | Dimensions come from the file's own declaration, from the sensor borders inside Panasonic's own RAW formats (rw2, raw, rwl — the Leicas built on those bodies included), or from the embedded preview. A RAW with none of those (measured: the Blackmagic CinemaDNG) shows no size in the grid, and is asked again on every startup. On Windows a file that only exists in the cloud is the exception — the Shell supplies its dimensions without downloading it |
| No UI to rebuild the search index | If it breaks, delete pictkura.db in the settings folder and let it rebuild (thumbnails are rebuilt too) |
| No sort options for results | Newest capture date first, always |
| An import cannot be cancelled | Once started, it runs to the end |
| RTL layouts | Right-to-left languages such as Arabic are not supported yet |
| File | Location (Windows) |
|---|---|
| Settings | %APPDATA%\dev.harusame.pictkura\pictkura.toml |
| Database | %APPDATA%\dev.harusame.pictkura\pictkura.db |
| Thumbnails | %APPDATA%\dev.harusame.pictkura\thumbs\ |
You can edit the settings file by hand. Anything the app has no UI for — the patterns of
folders to exclude from scanning, or [import] sidecar_extensions for the files
carried along with each photo — can be changed there.
Your photos are never stored in these places.
Deleting the database does not delete any photo; it is simply rebuilt.