   detected."
   [show device-filter & args]
   {:pre [(have? some? show) (have? some? device-filter)]}
+  @controller-binding-loader  ; Make sure controller implementations are finished registering
   (let [idle (atom true)
         controller (atom nil)]
     (letfn [(disconnection-handler []

         :device-filter device-filter
         :cancel cancel-handler}
        {:type ::watcher}))))

;; Load all the built-in controller implementations, so they can register their recognizers.
(at-at/after 50 (fn []
                  (require 'afterglow.controllers.ableton-push)
                  (require 'afterglow.controllers.ableton-push-2)
                  (require 'afterglow.controllers.launchpad-pro)
                  (require 'afterglow.controllers.launchpad-mini)
                  (require 'afterglow.controllers.launchpad-mk2))
             pool :desc "Register built-in grid controller implementations")

  function."
  [show device-filter & args]
  {:pre [(some? show) (some? device-filter)]}
  @controller-binding-loader  ; Make sure controller implementations are finished registering
  (let [port-in  (first (amidi/filter-devices device-filter (amidi/open-inputs-if-needed!)))
        port-out (first (amidi/filter-devices device-filter (amidi/open-outputs-if-needed!)))
        identity (when (every? some? [port-in port-out]) (identify port-in port-out))]
