diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js
index 2026234ae8d..70f15d97dcf 100644
--- a/src/plot_api/plot_api.js
+++ b/src/plot_api/plot_api.js
@@ -2566,6 +2566,8 @@ Plotly.addFrames = function(gd, frameList, indices) {
 
     var insertions = [];
     for(i = frameList.length - 1; i >= 0; i--) {
+        if(!Lib.isPlainObject(frameList[i])) continue;
+
         var name = (_hash[frameList[i].name] || {}).name;
         var newName = frameList[i].name;
 
diff --git a/test/jasmine/tests/frame_api_test.js b/test/jasmine/tests/frame_api_test.js
index 495acbb6418..16c253e06e8 100644
--- a/test/jasmine/tests/frame_api_test.js
+++ b/test/jasmine/tests/frame_api_test.js
@@ -43,6 +43,13 @@ describe('Test frame api', function() {
             }).catch(fail).then(done);
         });
 
+        it('compresses garbage when adding frames', function(done) {
+            Plotly.addFrames(gd, [null, 'garbage', 14, true, false, {name: 'test'}, null]).then(function() {
+                expect(Object.keys(h)).toEqual(['test']);
+                expect(f).toEqual([{name: 'test'}]);
+            }).catch(fail).then(done);
+        });
+
         it('treats a null list as a noop', function(done) {
             Plotly.addFrames(gd, null).then(function() {
                 expect(Object.keys(h)).toEqual([]);