          :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")

(def maximum-bpm
  "The highest BPM value which controllers are allowed to set."
  200)

(defonce
  ^{:private true

  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))]
