                                       (assign assigner show snapshot target result))
                                     previous-assignment assigners)]
              (Assignment. kind target-id target assignment))))))
+
+(defn- with-default-assignment
+  "If the current assignment is empty, but there was a previous
+  assignment value, turn it into an actual assignment based on the
+  supplied template."
+  [assignment template previous-assignment]
+  (or assignment
+      (when previous-assignment (map->Assignment (assoc template :value previous-assignment)))))
 
 (defn fade
   "Create an effect which fades between two other effects as the value

  the way Afterglow evaluates assigners, that means that if any
  constituent effects try to assign to the same target, the later ones
  will have a chance to override or blend with the earlier ones."
  [scene-name & effects]
  (let [active (atom effects)]
    (Effect. scene-name

             (fn [show snapshot]
               (swap! active (fn [fx] () (filterv #(not (end % show snapshot)) fx)))
               (empty? @active)))))

(defn blank
  "Create an effect which does nothing. This can be useful, for
  example, when you want to use [[fade]] to fade into an effect from a
  state where there was simply nothing happening."
  []
  (scene "Blank"))

(defmulti fade-between-assignments
  "Calculates an intermediate value between two attribute assignments
