         f (.createFactory js/React c)]
     f))
 
+(defn num-changer [world label key]
+  (sab/html
+    [:label {} label]
+    [:input {:type     "number"
+             :key      key
+             :value    (key @world)
+             :onChange (fn [evt]
+                         (update-world! world
+                                        (fn [w]
+                                          (println "set" key "from" (key w) "to" (.-value (.-target evt)))
+                                          (assoc w key (.-value (.-target evt))))))}]))
+
+(defn edit-controls [world]
+  (sab/html (num-changer world "World Width" :width)
+            (num-changer world "World Height" :height)
+            (num-changer world "Scroll X" :scroll-x)
+            (num-changer world "Scroll Y" :scroll-y)
+            (num-changer world "Camera Width" :camera-width)
+            (num-changer world "Camera Height" :camera-height)))
+
 (defn rererender [target]
-  (let [w @world]
+  (let [w @world
+        quick-check-keys [:now :scroll-x :scroll-y :width :height :camera-width :camera-height :pause-on-change :playing]]
     ; slightly weird checks here instead of equality to improve idle performance/overhead
     (when (or (not last-world)
               (not (identical? last-world w))
+              (not= (select-keys last-world quick-check-keys)
+                    (select-keys w quick-check-keys))
               (not= (:entry-time (current-config w))
-                    (:entry-time (current-config last-world)))
-              (not= (:pause-on-change w)
-                    (:pause-on-change last-world))
-              (not= (:playing w)
-                    (:playing last-world))
-              (not= (:now w)
-                    (:now last-world)))
+                    (:entry-time (current-config last-world))))
       (set! last-world @world)
-      (js/React.render (world-widget #js {"args" {:world  world
-                                                  :width  640
-                                                  :height 240}}) target)))
+      (js/React.render (sab/html [:div {}
+                                  (world-widget #js {"args" {:world  world
+                                                             :width  640
+                                                             :height 480}})
+                                  (edit-controls world)]) target)))
   (.requestAnimationFrame js/window #(rererender target)))
  (.requestAnimationFrame js/window tick-frame)
  (reset-world! default-world-desc))

(def show-transition-thresholds false)

(defn button-bar [world]
  (let [wld @world
        ha-defs (:ha-defs wld)]

            new-configs (or (:configs new-w) old-configs)
            explored (or (:explored new-w) #{})
            seen-configs (:seen-configs new-w)
            focused-objects #{}]
        (if (or (empty? seen)
                (not= (last old-configs) (last new-configs)))
          (let [_ (println "empty-seen?" (empty? seen))
                newest (if (and (not (empty? old-configs))
                                (< (count old-configs) (count new-configs))
                                (= (:desc w) (:desc new-w)))
                         (concat [(last old-configs)]
