diff --git a/src/aura_engine/scheduling/scheduler.py b/src/aura_engine/scheduling/scheduler.py
index 7082a8b465fde68e02e8fc1fd108024e95535f87..c2cabf5f8fbc0a66f0f9eb761487b3a7b83331be 100644
--- a/src/aura_engine/scheduling/scheduler.py
+++ b/src/aura_engine/scheduling/scheduler.py
@@ -193,16 +193,24 @@ class PlayCommand(EngineExecutor):
         Args:
             items ([PlaylistItem]): The set of playlist items to be played.
         """
+        retry_interval = 1
+        log_interval = 30
+        last_log = 0
+
         items_str = ResourceUtil.get_items_string(items)
         self.logger.info(SU.cyan(f"=== play('{items_str}') ==="))
+
         last_item: PlaylistItem = items[-1]
         while not last_item.play.is_ready():
-            msg = f"PLAY: Item(s) not yet ready to be played" f" (Items: {items_str})"
-            self.logger.critical(SU.red(msg))
+            now = SU.timestamp()
+            if now - last_log > log_interval:
+                msg = f"PLAY: Item(s) not yet ready to be played" f" (Items: {items_str})"
+                self.logger.critical(SU.red(msg))
+                last_log = now
             if last_item.play.state == PlayState.PlayStateType.FAILED:
                 self.logger.info("PLAY: Preloading failed - skipping play")
                 return
-            time.sleep(2)
+            time.sleep(retry_interval)
         self.engine.player.play(items[0], engine.Player.TransitionType.FADE)
         timetable_renderer: utils.TimetableRenderer = self.engine.scheduler.timetable_renderer
         self.logger.info(timetable_renderer.get_ascii_timeslots())