diff --git a/app.ico b/app.ico
new file mode 100644
index 0000000..cd1b3b0
Binary files /dev/null and b/app.ico differ
diff --git a/package.json b/package.json
index 5bb5df2..cd7209a 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
   "productName": "cyb3r-youtube-downloader",
   "version": "1.0.0",
   "description": "My Electron application description",
-  "main": "src/index.js",
+  "main": "src/main.js",
   "scripts": {
     "start": "electron-forge start",
     "package": "electron-forge package",
@@ -31,13 +31,14 @@
         "packageManager": "npm"
       },
       "electronWinstallerConfig": {
-        "name": "cyb3r_youtube_downloader"
+        "name": "cyb3r_youtube_downloader",
+        "icon": "app.ico"
       },
       "electronInstallerDebian": {},
       "electronInstallerRedhat": {},
       "github_repository": {
-        "owner": "",
-        "name": ""
+        "owner": "Theenoro",
+        "name": "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader"
       },
       "windowsStoreConfig": {
         "packageName": "",
@@ -46,10 +47,11 @@
     }
   },
   "dependencies": {
-    "electron-compile": "^6.4.1",
     "electron": "^1.6.11",
+    "electron-compile": "^6.4.1",
     "mkdirp": "^0.5.1",
-    "request": "^2.81.0"
+    "request": "^2.81.0",
+    "unzip": "^0.1.11"
   },
   "devDependencies": {
     "babel-plugin-transform-async-to-generator": "^6.24.1",
diff --git a/src/app/view/init.html b/src/app/view/init.html
new file mode 100644
index 0000000..c1f40fa
--- /dev/null
+++ b/src/app/view/init.html
@@ -0,0 +1,205 @@
+
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+
+
+
+    
+    
+    
+    
+    
+
+
diff --git a/src/controller/download.js b/src/controller/download.js
new file mode 100644
index 0000000..bc0d7bf
--- /dev/null
+++ b/src/controller/download.js
@@ -0,0 +1,126 @@
+const request = require('request');
+const fs      = require('fs')
+const ipcMain = require('electron').ipcMain;
+const unzip   = require('unzip')
+
+
+var libsx = {
+    "ffmpeg":"ffmpeg",
+    "ffplay":"ffplay",
+    "ffprobe":"ffprobe",
+    "youtube-dl":"youtube-dl"
+}
+var libs = {};
+
+libs.listen = null;
+libs.libs = null;
+ipcMain
+.on('download-lib', (event, arg)=>{
+  console.log('TEST')
+  libs.listen = event;
+  console.log(`This platform is ${process.platform}`);
+  switch (process.platform) {
+      case "win32":
+          for (var lib in libsx) {
+              libsx[lib] = libsx[lib]+'.exe';
+          }
+          break;
+      default:
+  }
+  for (var lib in libsx) {
+      if (fs.existsSync(global.dir+"/lib/"+libsx[lib])) {
+
+      }else{
+          libsx[lib] = null;
+      }
+  }
+  libs.libs = libsx;
+  if(libsx['ffmpeg'] === null || libsx['ffplay'] === null || libsx['ffprobe'] === null ){
+      var z = 0;
+      libs.download(libs.ff(process.platform),"ffmpeg",function(data,file){
+          fs.createReadStream(file)
+          .pipe(unzip.Parse())
+          .on('entry', function (entry) {
+            var fileName = entry.path;
+            var type = entry.type; // 'Directory' or 'File'
+            var size = entry.size;
+            console.log(fileName)
+            if (fileName === "ffmpeg-latest-win32-static/bin/ffmpeg.exe" || fileName === "ffmpeg-latest-win32-static/bin/ffprobe.exe" ||  fileName === "ffmpeg-latest-win32-static/bin/ffplay.exe") {
+              entry.pipe(fs.createWriteStream(global.dir+'/lib/'+fileName.split('/')[2]));
+              console.log('TEST')
+              z++;
+              if(z == 3){
+                  libs.checkNext('youtube-dl');
+              }
+            } else {
+              entry.autodrain();
+            }
+          });
+      });
+  }else{
+      libs.checkNext('youtube-dl');
+  }
+  console.dir(libsx);
+})
+libs.checkNext = (nxt)=>{
+    if(  libs.libs['youtube-dl'] === null ){
+        libs.yt_dl(process.platform,function(){
+            libs.startFull();
+        });
+    }else{
+        libs.startFull();
+    }
+}
+libs.startFull = ()=>{
+    libs.listen.sender.send('fin-loading',{});
+}
+libs.ff = (os)=>{
+    var url = "";
+    switch (os) {
+        case "win32":
+            url = 'http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip';
+            break;
+        default:
+
+    }
+    return url;
+}
+libs.yt_dl = (os,cb)=>{
+    var url = "";
+    switch (os) {
+        case "win32":
+            url = 'https://yt-dl.org/downloads/2017.08.13/youtube-dl.exe'
+            break;
+        default:
+
+    }
+    libs.download(url,"youtube-dl",function(data,file){
+        fs.renameSync(file,global.dir+'/lib/youtube-dl.exe');
+        cb();
+    })
+
+}
+libs.download = (url,data,cb)=>{
+    var r = request(url);
+    var actual = 1;
+    var  full = 100;
+    var perc = 0;
+    r.on('data', function (chunk) {
+        actual += chunk.length;
+        perc = actual / full * 100;
+        console.log(perc);
+        libs.listen.sender.send('progress',{percent :Math.floor(perc)});
+    });
+
+    r.on('response',  function (res) {
+      res.pipe(fs.createWriteStream(global.dir+'/tmp/' + data + '.' + res.headers['content-type'].split('/')[1]));
+      full =  res.headers[ 'content-length' ] ;
+      res.on('end', function () {
+         cb(data,global.dir+'/tmp/' + data + '.' + res.headers['content-type'].split('/')[1]);
+      })
+    });
+}
+
+
+
+module.exports = libs;
diff --git a/src/index.js b/src/index.js
index 4480a44..7c4c4f2 100644
--- a/src/index.js
+++ b/src/index.js
@@ -9,45 +9,100 @@ const {
 }         = require('electron');
 const fs  = require('fs');
 const yt_dl = require('./controller/youtube-dl')
+const dl   = require('./controller/download');
 
-var win ;
+if (!fs.existsSync(global.dir+'/tmp/inst')) {
+    fs.writeFileSync(global.dir+'/tmp/inst',"out");
+    var win;
+    const createWindow = () =>{
+        win = new BrowserWindow({
+            width: 320,
+            height: 500,
+            show: false,
+            frame: false
+        })
+        win.once('ready-to-show', () => {
+        })
 
-app.getPath('documents')
-const createWindow = () =>{
-    win = new BrowserWindow({
-        width: 1010,
-        height: 800,
-        minWidth: 1010,
-        minHeight: 565,
-        show: false,
-        frame: true
-    })
-    win.loadURL(`file://${__dirname}/app/view/layout.html`)
-    win.once('ready-to-show', () => {
-        win.show()
-        //var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4")
-        //x.download();
-    })
+        win.on('closed', () => {
+          win = null;
+        });
+    }
+    app.on('ready', createWindow);
+    app.on('window-all-closed', () => {
+      if (process.platform !== 'darwin') {
+        app.quit();
+      }
+    });
+}else{
+    var win ;
 
-    win.on('closed', () => {
-      // Dereference the window object, usually you would store windows
-      // in an array if your app supports multi windows, this is the time
-      // when you should delete the corresponding element.
-      win = null;
+
+    app.getPath('documents')
+    const createWindow = () =>{
+
+        //dl.download(dl.ff(process.platform));
+        /*
+
+        win = new BrowserWindow({
+            width: 1010,
+            height: 800,
+            minWidth: 1010,
+            minHeight: 565,
+            show: false,
+            frame: true
+        })
+        */
+        win = new BrowserWindow({
+            width: 320,
+            height: 500,
+            show: false,
+            frame: false
+        })
+        ipcMain
+        .on('start-full', (event, arg)=>{
+
+            var win2 = new BrowserWindow({
+                width: 1010,
+                height: 800,
+                minWidth: 1010,
+                minHeight: 565,
+                show: true,
+                frame: true
+            })
+            win.close();
+            win2.loadURL(`file://${__dirname}/app/view/layout.html`)
+            win = win2;
+        });
+        win.loadURL(`file://${__dirname}/app/view/init.html`)
+        win.once('ready-to-show', () => {
+            win.show()
+            //var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4")
+            //x.download();
+        })
+
+        win.on('closed', () => {
+          // Dereference the window object, usually you would store windows
+          // in an array if your app supports multi windows, this is the time
+          // when you should delete the corresponding element.
+          win = null;
+        });
+    }
+    app.on('ready', createWindow);
+    app.on('window-all-closed', () => {
+      // On OS X it is common for applications and their menu bar
+      // to stay active until the user quits explicitly with Cmd + Q
+      if (process.platform !== 'darwin') {
+        app.quit();
+      }
+    });
+    app.on('activate', () => {
+      // On OS X it's common to re-create a window in the app when the
+      // dock icon is clicked and there are no other windows open.
+      if (mainWindow === null) {
+        createWindow();
+      }
     });
 }
-app.on('ready', createWindow);
-app.on('window-all-closed', () => {
-  // On OS X it is common for applications and their menu bar
-  // to stay active until the user quits explicitly with Cmd + Q
-  if (process.platform !== 'darwin') {
-    app.quit();
-  }
-});
-app.on('activate', () => {
-  // On OS X it's common to re-create a window in the app when the
-  // dock icon is clicked and there are no other windows open.
-  if (mainWindow === null) {
-    createWindow();
-  }
-});
+
+module.exports = app;
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..4b8fddb
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,46 @@
+var app = require('./index');
+
+var handleStartupEvent = function() {
+  if (process.platform !== 'win32') {
+    return false;
+  }
+
+  var squirrelCommand = process.argv[1];
+  console.log(squirrelCommand);
+  switch (squirrelCommand) {
+      case '--squirrel-install':
+              target = path.basename(process.execPath);
+              updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
+              var createShortcut = updateDotExe + ' --createShortcut=' + target + ' --shortcut-locations=Desktop,StartMenu' ;
+              console.log (createShortcut);
+              exec(createShortcut);
+              // Always quit when done
+              app.quit();
+              return true;
+
+    case '--squirrel-uninstall':
+                // Undo anything you did in the --squirrel-install and
+                // --squirrel-updated handlers
+                target = path.basename(process.execPath);
+                updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
+                var createShortcut = updateDotExe + ' --removeShortcut=' + target ;
+                console.log (createShortcut);
+                exec(createShortcut);
+                // Always quit when done
+                app.quit();
+                return true;
+    case '--squirrel-obsolete':
+      // This is called on the outgoing version of your app before
+      // we update to the new version - it's the opposite of
+      // --squirrel-updated
+      app.quit();
+      return true;
+  }
+};
+
+(function(){
+    if (handleStartupEvent()) {
+      return;
+    }
+
+})
diff --git a/src/tmp/dummy b/src/tmp/dummy
new file mode 100644
index 0000000..e69de29