   "Schedule the scope to be updated every (/ 1000 FPS) ms (unless the scopes are
   already running in which case it does nothing."
   []
+  (ensure-internal-server!)
   (dosync
    (when-not @scopes-running?*
      (at-at/every (/ 1000 FPS) update-scopes scope-pool)

      :or {bus 0
           buf -1
           keep-on-top false}}]
     (let [buf (if (buffer? buf) (:id buf) buf)
           kind (if (= -1 buf) :bus :buf)
           num  (if (= -1 buf) bus buf)

(on-deps :studio-setup-completed ::create-scope-group #(dosync
                                                        (ref-set scope-group* (group :tail ROOT-GROUP))
                                                        (satisfy-deps :scope-group-created)))


(defn- ensure-internal-server!
  "Throws an exception if the server isn't internal - scope relies on fast
  access to shared buffers with the server which is currently only available
  with the internal server. Also ensures server is connected."
  []
  (when (disconnected?)
    (throw (Exception. "Cannot use scopes until a server has been booted or connected")))
  (when (external-server?)
    (throw (Exception. (str "Sorry, it's  only possible to use scopes with an internal server. Your server info is as follows: " (server-info))))))

(defn- update-scope-data
  "Updates the scope by reading the current status of the buffer and repainting.
