merge with splitting_text
diff --git a/extension/CSXS/manifest.xml b/extension/CSXS/manifest.xml
index bfa91ff..e159a79 100644
--- a/extension/CSXS/manifest.xml
+++ b/extension/CSXS/manifest.xml
@@ -6,11 +6,8 @@
 	</ExtensionList>
 	<ExecutionEnvironment>
 		<HostList>
-            <!-- Uncomment Host tags according to the apps you want your panel to support -->
-            <!-- Photoshop -->
-
             <Host Name="AEFT" Version="[13.0,13.9]" />
-            <Host Name="PHSP" Version="[15.0,15.9]" />
+            <Host Name="PPRO" Version="[8.0,8.9]" />
 
             <!-- Illustrator -->
             <!-- <Host Name="ILST" Version="[18.0,18.9]" />-->
diff --git a/extension/css/compsSelection.css b/extension/css/compsSelection.css
index 15c4f33..0248d8b 100644
--- a/extension/css/compsSelection.css
+++ b/extension/css/compsSelection.css
@@ -21,10 +21,6 @@
     
 }
 
-#compsSelection .buttons .settings{
-    float: right;
-}
-
 #compsSelection .compsTable{
     width: 100%;
     font-size: 10px;
@@ -131,4 +127,4 @@
     border-bottom: 1px solid red;
     padding: 4px;
 }
-    
\ No newline at end of file
+    
diff --git a/extension/css/snapshot.css b/extension/css/snapshot.css
new file mode 100644
index 0000000..f9790c0
--- /dev/null
+++ b/extension/css/snapshot.css
@@ -0,0 +1,115 @@
+.references{
+    background-color: #484043;
+    background-color: rgb(72, 64, 67);
+    background-color: #6E6568;
+    background-color: rgb(110, 101, 104);
+    background-color: #EAD3A8;
+    background-color: rgb(234, 211, 168);
+    background-color: #D23641;
+    background-color: rgb(210, 54, 65);
+    background-color: #FFFFFF;
+    background-color: rgb(255, 255, 255);
+}
+
+#snapshot {
+    width: 100%;
+}
+
+#snapshot .header{
+    padding-top: 10px;
+    padding-bottom: 10px;
+}
+
+#snapshot .header .buttons{
+    margin-top: 10px;
+}
+
+#snapshot h1{
+    color: #D23641;
+    margin: 0;
+}
+
+
+#snapshot .animContainer{
+    width: 100%;
+    background-color: #6E6568;
+}
+
+#snapshot .controls{
+    height: 40px;
+    width: 100%;
+    background-color: #EAD3A8;
+    border-top: 1px solid #484043;
+    position: relative;
+}
+
+#snapshot .controls .snapshotButton{
+    float: left;
+    margin-top: 5px;
+    margin-left: 4px;
+}
+
+#snapshot .controls .slider{
+    width: 100%;
+    height: 2px;
+    background-color: #D23641;
+    cursor: pointer;
+}
+
+#snapshot .controls .thumb{
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #D23641;
+    border: 1px solid #FFFFFF;
+    position: absolute;
+    left: -5px;
+    top: -5px;
+    cursor: pointer;
+    pointer-events: none;
+}
+
+#snapshot .controls .frames{
+    float: right;
+    padding: 10px;
+    color: #D23641;
+    font-size: 12px;
+    line-height: 20px;
+}
+
+#snapshot .controls .frames .current{
+    background-color: #484043;
+    display: inline-block;
+    vertical-align: top;
+    min-width: 20px;
+    height: 20px;
+    padding: 0px 2px;
+    text-align: right;
+}
+
+#snapshot .controls .frames .total{
+    display: inline-block;
+    vertical-align: top;
+}
+
+#snapshot .rendersSelection {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0,0,0,.8);
+}
+
+#snapshot .rendersSelection .listContainer{
+    text-align: center;
+}
+
+#snapshot .rendersSelection .topSpace{
+    height: 10%;
+}
+
+#snapshot  .rendersSelection .listContainer .generalButton{
+    display: block;
+    margin: auto;
+}
\ No newline at end of file
diff --git a/extension/css/styles.css b/extension/css/styles.css
index 8364e5f..234ab8e 100644
--- a/extension/css/styles.css
+++ b/extension/css/styles.css
@@ -34,6 +34,10 @@
     border-radius: .4em;
 }
 
+.rightFloat{
+    float: right;
+}
+
 #content {
     margin-right:auto;
     margin-left:auto;
@@ -121,6 +125,7 @@
 
 .buttonSeparator{
     width: 10px;
+    height: 1px;
     display: inline-block;
 }
 
diff --git a/extension/index.html b/extension/index.html
index 3388450..8937a59 100644
--- a/extension/index.html
+++ b/extension/index.html
@@ -10,6 +10,7 @@
 <link  id="hostStyle" rel="stylesheet" href="css/compsRender.css"/>
 <link  id="hostStyle" rel="stylesheet" href="css/message.css"/>
 <link  id="hostStyle" rel="stylesheet" href="css/info.css"/>
+<link  id="hostStyle" rel="stylesheet" href="css/snapshot.css"/>
 
 <title></title>
 </head>
@@ -19,7 +20,9 @@
     <div id="content">
         <div id='compsSelection'>
             <div class='buttons'>
-                <button class='generalButton settings'>Info</button>
+                <button class='generalButton rightFloat settings'>Info</button>
+                <div class='buttonSeparator rightFloat'></div>
+                <button class='generalButton rightFloat snapshot'>Snapshot</button>
                 <button class='generalButton refresh'>Refresh</button>
                 <div class='buttonSeparator'></div>
                 <button class='generalButton highlightButton render disabled'>Render</button>
@@ -67,6 +70,35 @@
                 <button class='generalButton return'>Return</button>
             </div>
         </div>
+        <div id='snapshot'>
+            <div class='header'>
+                <h1>Select animation</h1>
+                <div class='buttons'>
+                    <button class='generalButton rightFloat current'>Current renders</button>
+                    <div class='buttonSeparator rightFloat'></div>
+                    <button class='generalButton rightFloat browse'>Browse</button>
+                    <button class='generalButton return'>Back</button>
+                </div>
+            </div>
+            <div class="animContainer"></div>
+            <div class="controls">
+                <div class="slider"></div>
+                <div class="thumb"></div>
+                <button class="snapshotButton generalButton highlightButton">Take Snapshot</button>
+                <div class="frames">
+                    <div class="current" contenteditable="true"></div>
+                    <div class="total" >/<span class='value'></span></div>
+                </div>
+            </div>
+            <div class="rendersSelection">
+                <div class="topSpace"></div>
+                <div class="listContainer">
+                
+                </div>
+                <div>
+                </div>
+            </div>
+        </div>
         <div id='info'>
             <div class='buttons'>
                 <button class='generalButton return'>Back</button>
@@ -117,6 +149,7 @@
     <script src="js/controllers/CompRenderController.js"></script>
     <script src="js/controllers/messageController.js"></script>
     <script src="js/controllers/InfoController.js"></script>
+    <script src="js/controllers/snapshotController.js"></script>
     <script src="js/main.js"></script>
 
         
diff --git a/extension/js/controllers/CompRenderController.js b/extension/js/controllers/CompRenderController.js
index 822f63f..121efd0 100644
--- a/extension/js/controllers/CompRenderController.js
+++ b/extension/js/controllers/CompRenderController.js
@@ -90,6 +90,7 @@
         }
         if (messageData.isFinished) {
             elem.addClass('rendered');
+            compData.renderData = messageData.data.substr(7);
         }
     }
     
@@ -134,9 +135,14 @@
         view.hide();
     }
     
+    function getCompositions() {
+        return compositions;
+    }
+    
     ob.init = init;
     ob.show = show;
     ob.hide = hide;
+    ob.getCompositions = getCompositions;
     
     return ob;
 }());
\ No newline at end of file
diff --git a/extension/js/controllers/CompSelectionController.js b/extension/js/controllers/CompSelectionController.js
index d4f7b49..97957ea 100644
--- a/extension/js/controllers/CompSelectionController.js
+++ b/extension/js/controllers/CompSelectionController.js
@@ -224,12 +224,17 @@
         mainController.showView('settings');
     }
     
+    function showSnapshotView() {
+        mainController.showView('snapshot');
+    }
+    
     function init(csIntfc) {
         view = $('#compsSelection');
         compsListContainer = view.find('.compsList');
         csInterface = csIntfc;
         csInterface.addEventListener('bm:compositions:list', updateCompositionsList);
         view.find('.refresh').on('click', getCompositionsList);
+        view.find('.snapshot').on('click', showSnapshotView);
         renderButton = view.find('.render');
         renderButton.on('click', renderCompositions);
         view.find('.settings').on('click', showSettings);
diff --git a/extension/js/controllers/snapshotController.js b/extension/js/controllers/snapshotController.js
new file mode 100644
index 0000000..748dbe6
--- /dev/null
+++ b/extension/js/controllers/snapshotController.js
@@ -0,0 +1,203 @@
+/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
+/*global $, alertData, successData, bodymovin, mainController, compRenderController, messageController */
+var snapshotController = (function () {
+    'use strict';
+    var ob = {}, view, csInterface, anim, header, controls, current, animContainer, slider, thumb, snapshotButton, $window, showing = false;
+    var totalFrames, currentFrame, sliderWidth, rendersSelection, listContainer;
+    
+    function showSelection() {
+        mainController.showView('selection');
+    }
+    
+    function showControls() {
+        controls.find('.snapshotButton').show();
+        controls.find('.frames .total').show();
+        current.show();
+    }
+    
+    function hideControls() {
+        controls.find('.snapshotButton').hide();
+        controls.find('.frames .total').hide();
+        current.hide();
+    }
+    
+    function browseFiles() {
+        var eScript = 'bm_main.browseFile()';
+        csInterface.evalScript(eScript);
+    }
+    
+    function updateControls(origin) {
+        if (origin !== 'input') {
+            controls.find('.frames .current').html(currentFrame);
+        }
+        if (anim) {
+            anim.goToAndStop(currentFrame + 1, true);
+        }
+        var x = (currentFrame / totalFrames) * sliderWidth;
+        thumb.css('left', x - 5 + 'px');
+    }
+    
+    function loadAnimation(data) {
+        var jsonData = JSON.parse(data);
+        totalFrames = jsonData.animation.totalFrames;
+        controls.find('.frames .total .value').html(totalFrames);
+        currentFrame = 1;
+        if (anim) {
+            anim.destroy();
+        }
+        updateControls();
+        var params = {
+                animType: 'svg',
+                wrapper: animContainer[0],
+                loop: false,
+                autoplay: false,
+                prerender: true,
+                animationData: jsonData
+            };
+        anim = bodymovin.loadAnimation(params);
+        showControls();
+    }
+    
+    function addSelectionListener(elem, data) {
+        elem.on('click', function () {
+            rendersSelection.hide();
+            loadAnimation(data.renderData);
+        });
+    }
+    
+    function displayCurrentRenders() {
+        var compositions = compRenderController.getCompositions();
+        if (!compositions || compositions.length === 0) {
+            messageController.showMessage({type: 'alert', message: 'You have no recent renders.\n Try browsing your files'});
+        } else if (compositions.length === 1) {
+            loadAnimation(compositions[0].renderData);
+        } else {
+            rendersSelection.show();
+            listContainer.empty();
+            var i, len = compositions.length;
+            var li;
+            for (i = 0; i < len; i += 1) {
+                li = $('<button class="generalButton">');
+                li.html(compositions[i].name);
+                listContainer.append(li);
+                addSelectionListener(li, compositions[i]);
+            }
+        }
+    }
+    
+    function handleFilePath(ev) {
+        loadAnimation(ev.data.substr(7));
+    }
+    
+    function handleWindowResize() {
+        if (!showing) {
+            return;
+        }
+        animContainer.css('height', $window.height() - 2 - header.outerHeight() - controls.outerHeight() + 'px');
+        sliderWidth = slider.width();
+        
+    }
+    
+    function frameChangeHandler() {
+        var num = parseInt(current.html(), 10);
+        if (isNaN(num)) {
+            return;
+        }
+        if (num < 0) {
+            num = 0;
+        } else if (num >= totalFrames) {
+            num = totalFrames - 1;
+        }
+        currentFrame = num;
+        updateControls('input');
+    }
+    
+    function updateSliderValue(pageX) {
+        var x = pageX - slider.offset().left;
+        var perc = x / sliderWidth;
+        if (perc < 0) {
+            perc = 0;
+        } else if (perc > 1) {
+            perc = 1;
+        }
+        currentFrame = Math.round(perc * totalFrames);
+        updateControls();
+    }
+    
+    function sliderMove(ev) {
+        updateSliderValue(ev.pageX);
+    }
+        
+    function sliderUp(ev) {
+        $window.off('mousemove', sliderMove);
+        $window.off('mouseup', sliderUp);
+    }
+        
+    function sliderDown(ev) {
+        $window.on('mouseup', sliderUp);
+        $window.on('mousemove', sliderMove);
+        updateSliderValue(ev.pageX);
+    }
+    
+    function addSliderListeners() {
+        
+        slider = controls.find('.slider');
+        thumb = controls.find('.thumb');
+        slider.on('mousedown', sliderDown);
+    }
+    
+    function saveSnapshot() {
+        var svgData = animContainer[0].innerHTML;
+        var result = window.cep.fs.showSaveDialogEx('Select location', '', ['*.svg'], 'snapshot.svg');
+        var targetFilePath = result.data;
+        var writeResult = window.cep.fs.writeFile(targetFilePath, svgData);
+        if (0 !== writeResult.err) {
+            console.log('faillled');
+        }
+    }
+    
+    function init(csIntfc) {
+        csInterface = csIntfc;
+        view = $('#snapshot');
+        view.hide();
+        view.find('.buttons .current').on('click', displayCurrentRenders);
+        view.find('.buttons .browse').on('click', browseFiles);
+        view.find('.return').on('click', showSelection);
+        animContainer = view.find('.animContainer');
+        controls = view.find('.controls');
+        controls.find('.snapshotButton').on('click', saveSnapshot);
+        current = controls.find('.frames .current');
+        current.on('input', frameChangeHandler);
+        header = view.find('.header');
+        rendersSelection = view.find('.rendersSelection');
+        listContainer = rendersSelection.find('.listContainer');
+        rendersSelection.hide();
+        $window = $(window);
+        csInterface.addEventListener('bm:file:path', handleFilePath);
+        $(window).on('resize', handleWindowResize);
+        addSliderListeners();
+        hideControls();
+    }
+    
+    function show() {
+        if (!showing) {
+            showing = true;
+            view.show();
+            handleWindowResize();
+        }
+    }
+    
+    function hide() {
+        if (showing) {
+            showing = false;
+            view.hide();
+            slider.off('mouseup', sliderUp);
+            slider.off('mousemove', sliderMove);
+        }
+    }
+    
+    ob.show = show;
+    ob.hide = hide;
+    ob.init = init;
+    return ob;
+}());
\ No newline at end of file
diff --git a/extension/js/main.js b/extension/js/main.js
index 8824531..ef11098 100644
--- a/extension/js/main.js
+++ b/extension/js/main.js
@@ -1,5 +1,5 @@
 /*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
-/*global $, window, location, CSInterface, SystemPath, themeManager, compSelectionController, compRenderController, messageController, infoController*/
+/*global $, window, location, CSInterface, SystemPath, themeManager, compSelectionController, compRenderController, messageController, infoController, snapshotController*/
 
 var mainController = (function () {
     'use strict';
@@ -45,6 +45,8 @@
         messageController.init(csInterface);
         mainViews.push({id: 'settings', controller: infoController});
         infoController.init(csInterface);
+        mainViews.push({id: 'snapshot', controller: snapshotController});
+        snapshotController.init(csInterface);
         loadJSX('initializer.jsx');
         
         showView('selection');
diff --git a/extension/jsx/hostscript.jsx b/extension/jsx/hostscript.jsx
index ccec7c0..5a518b4 100644
--- a/extension/jsx/hostscript.jsx
+++ b/extension/jsx/hostscript.jsx
@@ -3,6 +3,24 @@
 var bm_main = (function () {
     'use strict';
     var ob = {};
+    
+    function browseFile() {
+        //openDlg()
+        var f = new File(Folder.desktop.absoluteURI);
+        var openFileData = f.openDlg();
+        if (openFileData !== null) {
+            var file = new File(openFileData.absoluteURI);
+            if (file.open('r')) {
+                var reading = file.read();
+                reading = '__PFX__' + reading;
+                bm_eventDispatcher.sendEvent('bm:file:path', reading);
+            }
+            
+        }
+
+    }
+    
+    ob.browseFile = browseFile;
 
     return ob;
 }());
\ No newline at end of file
diff --git a/extension/jsx/renderManager.jsx b/extension/jsx/renderManager.jsx
index ac70929..fd54bc7 100644
--- a/extension/jsx/renderManager.jsx
+++ b/extension/jsx/renderManager.jsx
@@ -4,7 +4,7 @@
     'use strict';
     
     var ob = {}, pendingLayers = [], pendingComps = [], destinationPath, currentCompID, totalLayers, currentLayer, currentCompSettings;
-    
+
     function verifyTrackLayer(layerData, comp, pos) {
         var nextLayerInfo = comp.layers[pos + 2];
         if (nextLayerInfo.isTrackMatte) {
@@ -104,7 +104,7 @@
     function saveData() {
         bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Saving data ', compId: currentCompID, progress: 1});
         bm_dataManager.saveData(ob.renderData.exportData, destinationPath, currentCompSettings);
-        bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Render finished ', compId: currentCompID, progress: 1, isFinished: true});
+        bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Render finished ', compId: currentCompID, progress: 1, isFinished: true, data: '__PFX__' + string});
         reset();
         bm_compsManager.renderComplete();
     }