anchor.diff:  
   }
   
  -
  +class DreamTaint extends DreamDrawer {
  +    int threshold = 255;
  +  DreamTaint(CanvasElement image, CanvasElement canvas, int imageWidth, int seed) : super(image, canvas, imageWidth, seed);
  +
  +  @override
  +  Future<Null> drawSquiggles() async {
  +      window.alert("HOLY SHIT");
  +  }
  +
  +  @override
  +  Future<Null> drawNoise() async {
  +
  +      new Timer(new Duration(milliseconds: 100), () => drawNoise());
  +  }
  +
  +  //if you give me a canvas i will paint it black and make it gradient
  +  void coverWithGradient(CanvasElement sacrificeCanvas) {
  +        //TODO go through each pixel and make it solid black wiht an alpha value that slowly decreases based on y.
  +      //TODO play around with this later and make it procedural. can be circular or diagnoal or whatever
  +      sacrificeCanvas.context2D.fillRect(0,0, sacrificeCanvas.width, sacrificeCanvas.height); //make it a black box
  +      //if i return here i definitly see a black canvas in the end product
  +      ImageData boxImageData =sacrificeCanvas.context2D.getImageData(0, 0, sacrificeCanvas.width, sacrificeCanvas.height);
  +
  +      int maxY = canvas.height;
  +      Uint8ClampedList data = boxImageData.data; //Uint8ClampedList
  +      int currentGradient = 255;
  +      int row = 0;
  +      for(int i =0; i<data.length; i+=4) {
  +          if(i%maxY == 0){
  +              row ++;
  +          }
  +          currentGradient = (255* row/maxY).ceil();
  +          data[i+3] = currentGradient;
  +      }
  +      sacrificeCanvas.context2D.putImageData(boxImageData, 0,0);
  +  }
  +
  +  @override
  +  void noise([int speed=1]) {
  +      /*
  +      TODO
  +       take in an image
  +    * draw a gradient with alpha over that image
  +    * have a variable outside the method called threshold or whatever
  +    * if the value (or maybe saturation) is greater than that threshold, display it as a black pixel
  +    * animate over time, slowly decreasing that threshold
  +       */
  +      if(imageData == null) {
  +          imageData=imageCanvas.context2D.getImageData(0, 0, imageCanvas.width, imageCanvas.height);
  +          //don't want a clear canvas
  +          canvas.width = imageCanvas.width;
  +          canvas.height = imageCanvas.height;
  +          canvas.context2D.drawImage(imageCanvas,0,0);
  +          CanvasElement sacrifice = new CanvasElement(width: imageCanvas.width, height: imageCanvas.height);
  +          coverWithGradient(sacrifice);
  +          canvas.context2D.drawImage(sacrifice,0,0);
  +      }
  +
  +
  +
  +  }
  +
  +}
  +
  
positive.code:     contents = querySelector("#contents");
      ButtonElement button = new ButtonElement()..text = "Dream?";
      contents.append(button);
      image = await Loader.getResource("images/New_Trees_Background_Plus_Prince.png");
      InputElement fileElement = new InputElement();
      fileElement.type = "file";
      fileElement.classes.add("fileUploadButton");
  
negative.code:     //TODO draw a square of size imageWidth where the color comes from the image buffer
      Future<Null> drawSquiggles() async {
          if(imageData == null) {
              imageData=imageCanvas.context2D.getImageData(0, 0, canvas.width, canvas.height);
              //don't want a clear canvas
              canvas.context2D.drawImage(imageCanvas,0,0);
          }
  
          move();
  