diff --git a/lazy_player/__init__.py b/lazy_player/__init__.py
index e6a3895..6412597 100644
--- a/lazy_player/__init__.py
+++ b/lazy_player/__init__.py
@@ -20,10 +20,29 @@ class MainWindow(Gtk.ApplicationWindow):
     list_store: Gtk.StringList
     video_widget: Gtk.Picture
     pipeline: Gst.Pipeline
+    overlay_tick_callback_id: int
+    overlay_label: Gtk.Label
+    overlay_hide_time: float
 
     def __init__(self, *args: Any, **kwargs: Any):
         super().__init__(*args, **kwargs)
 
+        # For overlay text timeout
+        self.overlay_hide_time = 0.0
+        self.overlay_label = Gtk.Label()
+        self.overlay_label.set_name("overlay-text")
+        self.overlay_label.set_valign(Gtk.Align.CENTER)
+        self.overlay_label.set_halign(Gtk.Align.CENTER)
+        self.overlay_label.set_visible(False)
+
+        def update_overlay(widget: Gtk.Widget, frame_clock: Gdk.FrameClock, data: Any) -> bool:
+            current_time = frame_clock.get_frame_time() / 1_000_000
+            if current_time >= self.overlay_hide_time:
+                self.overlay_label.set_visible(False)
+            return True
+
+        self.overlay_tick_callback_id = self.add_tick_callback(update_overlay, None)
+
         # Make window fullscreen and borderless
         self.set_decorated(False)
         self.fullscreen()
@@ -51,6 +70,7 @@ class MainWindow(Gtk.ApplicationWindow):
         overlay_box.set_vexpand(True)
         overlay_box.set_hexpand(True)
         overlay_box.append(self.video_widget)
+        overlay_box.append(self.overlay_label)
 
         # Setup GStreamer pipeline
         self.pipeline = Gst.Pipeline.new("video-player")
@@ -123,6 +143,7 @@ class MainWindow(Gtk.ApplicationWindow):
                     playbin.set_property("uri", f"file://{os.path.abspath(string)}")
                     self.pipeline.set_state(Gst.State.PLAYING)
                     self.stack.set_visible_child_name("overlay")
+                    self.show_overlay_text(string)
 
         self.list_view.connect("activate", on_activate)
 
@@ -243,6 +264,19 @@ class MainWindow(Gtk.ApplicationWindow):
             Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, new_pos
         )
 
+    def show_overlay_text(self, text: str, timeout_seconds: float = 1.0) -> None:
+        """Show text in a centered overlay that disappears after timeout"""
+        self.overlay_label.set_text(text)
+        self.overlay_label.set_visible(True)
+
+        # Set absolute time when overlay should hide
+        frame_clock = self.get_frame_clock()
+        if frame_clock is None:
+            return
+
+        frame_time = frame_clock.get_frame_time() / 1_000_000  # Convert to seconds
+        self.overlay_hide_time = frame_time + timeout_seconds
+
     def _populate_file_list(self) -> None:
         # TODO: Implement proper version sort (strverscmp equivalent)
 
diff --git a/lazy_player/style.css b/lazy_player/style.css
index 886e02a..104a52f 100644
--- a/lazy_player/style.css
+++ b/lazy_player/style.css
@@ -7,3 +7,12 @@ listview > row {
 #black-overlay {
   background-color: black;
 }
+
+#overlay-text {
+  color: white;
+  font-size: 48px;
+  font-family: monospace;
+  background-color: rgba(64, 64, 64, 0.25);
+  padding: 20px;
+  border-radius: 10px;
+}