videopix commited on
Commit
dc123fc
·
verified ·
1 Parent(s): 76917a6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -33
app.py CHANGED
@@ -163,7 +163,7 @@ def run_task(task_id, src_bytes, tgt_bytes):
163
 
164
 
165
  # ============================================================
166
- # FastAPI + UI
167
  # ============================================================
168
  app = FastAPI(title="FaceSwap (GFPGAN-Lite)")
169
 
@@ -178,14 +178,12 @@ def home():
178
  <title>FaceSwap</title>
179
  <meta name="viewport" content="width=device-width,initial-scale=1">
180
  <style>
181
- body{background:#0e1525;color:white;font-family:Arial;margin:0;padding:20px}
182
  .container{max-width:1100px;margin:auto}
183
  .flex{display:flex;gap:16px;flex-wrap:wrap}
184
- .zone{flex:1;min-width:280px;border:2px dashed #ffffff33;padding:18px;border-radius:10px;text-align:center;cursor:pointer}
185
  .preview img{max-width:100%;border-radius:10px}
186
  button{padding:10px 18px;border-radius:10px;border:none;background:#6c5ce7;color:white;font-weight:600}
187
- .loader{border:3px solid #ffffff33;border-top-color:#00cec9;border-radius:50%;width:18px;height:18px;animation:spin .8s linear infinite;display:inline-block}
188
- @keyframes spin{to{transform:rotate(360deg)}}
189
  </style>
190
  </head>
191
  <body>
@@ -201,45 +199,29 @@ Source Image
201
  Target Image
202
  </label>
203
  </div>
204
- <br>
205
- <button id="go">Start</button>
206
- <span id="status"></span>
207
- <br><br>
208
  <img id="out">
209
  </div>
210
-
211
  <script>
212
- const src=document.getElementById("src"),
213
- tgt=document.getElementById("tgt"),
214
- go=document.getElementById("go"),
215
- out=document.getElementById("out"),
216
- status=document.getElementById("status");
217
-
218
- document.querySelectorAll(".zone")[0].onclick=()=>src.click();
219
- document.querySelectorAll(".zone")[1].onclick=()=>tgt.click();
220
-
221
- go.onclick=async()=>{
222
- if(!src.files[0]||!tgt.files[0]){alert("Select images");return;}
223
- status.innerHTML='Processing <span class="loader"></span>';
224
  let fd=new FormData();
225
- fd.append("source",src.files[0]);
226
- fd.append("target",tgt.files[0]);
227
  let r=await fetch("/swap-image",{method:"POST",body:fd});
228
  let j=await r.json();
229
  let id=j.task_id;
230
- let poll=setInterval(async()=>{
231
  let s=await fetch("/task-status/"+id).then(r=>r.json());
232
  if(s.status==="done"){
233
- clearInterval(poll);
234
- out.src="/task-result/"+id;
235
- status.innerHTML="Done";
236
- }
237
- if(s.status==="failed"){
238
- clearInterval(poll);
239
- status.innerHTML="Failed";
240
  }
241
  },1000);
242
- };
243
  </script>
244
  </body>
245
  </html>
 
163
 
164
 
165
  # ============================================================
166
+ # FastAPI + FULL UI
167
  # ============================================================
168
  app = FastAPI(title="FaceSwap (GFPGAN-Lite)")
169
 
 
178
  <title>FaceSwap</title>
179
  <meta name="viewport" content="width=device-width,initial-scale=1">
180
  <style>
181
+ body{background:#0e1525;color:#fff;font-family:Arial;margin:0;padding:20px}
182
  .container{max-width:1100px;margin:auto}
183
  .flex{display:flex;gap:16px;flex-wrap:wrap}
184
+ .zone{flex:1;min-width:280px;border:2px dashed #ffffff33;padding:18px;text-align:center;border-radius:10px;cursor:pointer}
185
  .preview img{max-width:100%;border-radius:10px}
186
  button{padding:10px 18px;border-radius:10px;border:none;background:#6c5ce7;color:white;font-weight:600}
 
 
187
  </style>
188
  </head>
189
  <body>
 
199
  Target Image
200
  </label>
201
  </div>
202
+ <button onclick="start()">Start</button>
 
 
 
203
  <img id="out">
204
  </div>
 
205
  <script>
206
+ let src,tgt;
207
+ document.getElementById("src").onchange=e=>src=e.target.files[0];
208
+ document.getElementById("tgt").onchange=e=>tgt=e.target.files[0];
209
+ async function start(){
210
+ if(!src||!tgt){alert("Select images");return;}
 
 
 
 
 
 
 
211
  let fd=new FormData();
212
+ fd.append("source",src);
213
+ fd.append("target",tgt);
214
  let r=await fetch("/swap-image",{method:"POST",body:fd});
215
  let j=await r.json();
216
  let id=j.task_id;
217
+ let t=setInterval(async()=>{
218
  let s=await fetch("/task-status/"+id).then(r=>r.json());
219
  if(s.status==="done"){
220
+ clearInterval(t);
221
+ document.getElementById("out").src="/task-result/"+id;
 
 
 
 
 
222
  }
223
  },1000);
224
+ }
225
  </script>
226
  </body>
227
  </html>