# Adding snow to Google Slides with the help of Google Apps Script

**Note:** TypeError: Cannot find function insertShape in object Slide error. There is an [open issue ticket](https://issuetracker.google.com/issues/70935605) reporting this problem

If you are looking for a way to add snowflakes to your Google Slide thanks to Google Apps Script this is very easy to do. As Google Apps Script uses a JavaScript syntax there is a lot of existing code you can repurpose. Originally looking to make an animated effect I came across [this example on thecodeplayer.com](http://thecodeplayer.com/walkthrough/html5-canvas-snow-effect). Whilst animating didn’t work in Google Slides the flake generation was very easy to modify. If you would like to add some snow you can [make a copy of this Slides template](https://docs.google.com/presentation/d/1tRWInVFJkQMbZzsjDMYZ-Ksum8u8EuKIq555cuLCgaM/copy) and follow the instructions. So you can see how it’s done the code is copied at the end of this post.

![Make it snow in Google Slides](https://hawksey.info/wp-content/uploads/2017/12/null.jpeg)Happy Google Apps Scripting in 2018!```

// @OnlyCurrentDoc
function onOpen() {
  var ui = SlidesApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Make it Snow')
      .addItem('Add Flakes', 'drawFlakes')
      .addItem('Clear Flakes', 'clearFlakes')
      .addToUi();
}
// Modified from http://thecodeplayer.com/walkthrough/html5-canvas-snow-effect
function drawFlakes(){
  // just grabbing and adding flakes to the first slide
  var slideDeck = SlidesApp.getActivePresentation();
  var slide = slideDeck.getSlides()[0];
  // slide dimensions
  var W = slideDeck.getPageWidth(); // window.innerWidth;
  var H = slideDeck.getPageHeight();
  // snowflake particles
  var mp = 500; //max particles
  var particles = [];
  // loop through and get a random flake properties
  for(var i = 0; i < mp; i++) {
    particles.push({
      x: Math.random()*W, //x-coordinate
      y: Math.random()*H, //y-coordinate
      r: Math.random()*4+1, //radius
      d: Math.random()//*mp //density
    })
    var p = particles[particles.length-1];
    // insert a flake
    var flake = slide.insertShape(SlidesApp.ShapeType.ARC, p.x, p.y, p.r, p.r);
    // set the fill and border
    flake.getFill().setSolidFill('#ffffff', p.d)
    flake.getBorder().setTransparent();
  }
}
function clearFlakes(){
  var slide = SlidesApp.getActivePresentation().getSlides()[0];
  var flakes = slide.getShapes();
  for (var f = 0; f < flakes.length; f++) {
    // remove only arcs (used to created flakes)
    if (flakes[f].getShapeType() == SlidesApp.ShapeType.ARC){
      flakes[f].remove();
    }
  }
}

```