diff --git a/crates/ui-egui/src/menus.rs b/crates/ui-egui/src/menus.rs
--- a/crates/ui-egui/src/menus.rs
+++ b/crates/ui-egui/src/menus.rs
@@ -2247,6 +2247,10 @@ mod open_recent_tests {
         assert_eq!(labels, vec!["a.png", "b.psd"]);
         assert!(items.iter().any(|i| i.id == "file.clearRecent" && i.path == rp));
 
+        let shortcuts = crate::prefs_ui::shortcut_items(&app);
+        assert!(!shortcuts.iter().any(|(id, _, _, _)| id.starts_with("file.openRecent.")));
+        assert!(shortcuts.iter().any(|(id, _, _, _)| id == "file.open"));
+
         // Clear Recent Files empties the list.
         let ctx = egui::Context::default();
         invoke(&mut app, &ctx, "file.clearRecent", json!({})).unwrap();
diff --git a/crates/ui-egui/src/prefs_ui.rs b/crates/ui-egui/src/prefs_ui.rs
--- a/crates/ui-egui/src/prefs_ui.rs
+++ b/crates/ui-egui/src/prefs_ui.rs
@@ -854,7 +854,7 @@ pub fn shortcut_items(app: &PhotocraftApp) -> Vec<(String, String, Vec<String>,
     let mut out: Vec<(String, String, Vec<String>, Option<String>)> = Vec::new();
     let mut seen = std::collections::HashSet::new();
     for it in crate::menus::menu_items(app) {
-        if it.label == "---" || !seen.insert(it.id.clone()) {
+        if it.label == "---" || it.id.starts_with("file.openRecent.") || !seen.insert(it.id.clone()) {
             continue;
         }
         let default = default_shortcut(&it.id).or(it.shortcut.clone().filter(|_| !app.session.prefs().shortcuts.contains_key(&it.id)));
