Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5dd6d1fe64 | |||
| 9af216e819 | |||
| 59d64d4b6a |
@@ -9,78 +9,52 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="media/demo.gif" alt="Demo GIF" width="800">
|
||||
<img src="media/demo.gif" alt="Demo GIF">
|
||||
<img src="media/avgpcperformancedemo.gif" alt="Performance Demo GIF">
|
||||
</p>
|
||||
|
||||
## Disclaimer
|
||||
|
||||
###### This software is intended as a productive contribution to the AI-generated media industry. It aims to assist artists with tasks like animating custom characters or using them as models for clothing, etc.
|
||||
|
||||
###### We are aware of the potential for unethical applications and are committed to preventative measures. A built-in check prevents the program from processing inappropriate media (nudity, graphic content, sensitive material like war footage, etc.). We will continue to develop this project responsibly, adhering to the law and ethics. We may shut down the project or add watermarks if legally required.
|
||||
|
||||
###### Users are expected to use this software responsibly and legally. If using a real person's face, obtain their consent and clearly label any output as a deepfake when sharing online. We are not responsible for end-user actions.
|
||||
## Quick Start - Pre-built (Windows / Nvidia)
|
||||
|
||||
<a href="https://hacksider.gumroad.com/l/vccdmm"> <img src="https://github.com/user-attachments/assets/7d993b32-e3e8-4cd3-bbfb-a549152ebdd5" width="285" height="77" />
|
||||
## Quick Start - Pre-built
|
||||
<div align="center">
|
||||
<a href="https://hacksider.gumroad.com/l/vccdmm">
|
||||
<img src="https://github.com/user-attachments/assets/7d993b32-e3e8-4cd3-bbfb-a549152ebdd5" width="285" height="77" />
|
||||
</a>
|
||||
<a href="https://krshh.gumroad.com/l/Deep-Live-Cam-Mac">
|
||||
<img src="https://github.com/user-attachments/assets/d5d913b5-a7de-4609-96b9-979a5749a703" width="285" height="77" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
##### This is the fastest build you can get if you have a discrete NVIDIA GPU.
|
||||
|
||||
## Quick Start - Pre-built (Mac / Silicon)
|
||||
|
||||
<a href="https://krshh.gumroad.com/l/Deep-Live-Cam-Mac"> <img src="https://github.com/user-attachments/assets/d5d913b5-a7de-4609-96b9-979a5749a703" width="285" height="77" />
|
||||
|
||||
###### These Pre-builts are perfect for non-technical users or those who don’t have time to, or can't manually install all the requirements. Just a heads-up: this is an open-source project, so you can also install it manually.
|
||||
|
||||
## TLDR; Live Deepfake in just 3 Clicks
|
||||

|
||||
1. Select a face
|
||||
2. Select which camera to use
|
||||
3. Press live!
|
||||
|
||||
## Features & Uses - Everything is real-time
|
||||
## Features - Everything is real-time
|
||||
|
||||
### Mouth Mask
|
||||
|
||||
**Retain your original mouth for accurate movement using Mouth Mask**
|
||||
**Retain your original mouth using Mouth Mask**
|
||||
|
||||
<p align="center">
|
||||
<img src="media/ludwig.gif" alt="resizable-gif">
|
||||
</p>
|
||||

|
||||
|
||||
### Face Mapping
|
||||
|
||||
**Use different faces on multiple subjects simultaneously**
|
||||
**Use different faces on multiple subjects**
|
||||
|
||||
<p align="center">
|
||||
<img src="media/streamers.gif" alt="face_mapping_source">
|
||||
</p>
|
||||

|
||||
|
||||
### Your Movie, Your Face
|
||||
|
||||
**Watch movies with any face in real-time**
|
||||
|
||||
<p align="center">
|
||||
<img src="media/movie.gif" alt="movie">
|
||||
</p>
|
||||

|
||||
|
||||
### Live Show
|
||||
## Benchmarks
|
||||
|
||||
**Run Live shows and performances**
|
||||
|
||||
<p align="center">
|
||||
<img src="media/live_show.gif" alt="show">
|
||||
</p>
|
||||
|
||||
### Memes
|
||||
|
||||
**Create Your most viral meme yet**
|
||||
|
||||
<p align="center">
|
||||
<img src="media/meme.gif" alt="show" width="450">
|
||||
<br>
|
||||
<sub>Created using Many Faces feature in Deep-Live-Cam</sub>
|
||||
</p>
|
||||
**Nearly 0% detection!**
|
||||
|
||||

|
||||
|
||||
## Installation (Manual)
|
||||
|
||||
@@ -98,7 +72,7 @@ This is more likely to work on your computer but will be slower as it utilizes t
|
||||
- Python (3.10 recommended)
|
||||
- pip
|
||||
- git
|
||||
- [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) - ```iex (irm ffmpeg.tc.ht)```
|
||||
- [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA)
|
||||
- [Visual Studio 2022 Runtimes (Windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/)
|
||||
|
||||
**2. Clone the Repository**
|
||||
@@ -110,7 +84,7 @@ https://github.com/hacksider/Deep-Live-Cam.git
|
||||
**3. Download the Models**
|
||||
|
||||
1. [GFPGANv1.4](https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth)
|
||||
2. [inswapper\_128\_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx)
|
||||
2. [inswapper\_128\_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128.onnx) (Note: Use this [replacement version](https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx) if you encounter issues)
|
||||
|
||||
Place these files in the "**models**" folder.
|
||||
|
||||
@@ -243,6 +217,7 @@ options:
|
||||
--many-faces process every face
|
||||
--map-faces map source target faces
|
||||
--mouth-mask mask the mouth region
|
||||
--nsfw-filter filter the NSFW image or video
|
||||
--video-encoder {libx264,libx265,libvpx-vp9} adjust output video encoder
|
||||
--video-quality [0-51] adjust output video quality
|
||||
--live-mirror the live camera display as you see it in the front-facing camera frame
|
||||
@@ -301,5 +276,3 @@ Looking for a CLI mode? Using the -s/--source argument will make the run program
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=hacksider/deep-live-cam&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.2 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.0 MiB |
@@ -41,3 +41,5 @@ show_mouth_mask_box = False
|
||||
mask_feather_ratio = 8
|
||||
mask_down_size = 0.50
|
||||
mask_size = 1
|
||||
opacity = 1.0
|
||||
face_swapper_enabled = True
|
||||
|
||||
@@ -14,6 +14,7 @@ from modules.utilities import (
|
||||
is_video,
|
||||
)
|
||||
from modules.cluster_analysis import find_closest_centroid
|
||||
from modules.globals import face_swapper_enabled, opacity
|
||||
import os
|
||||
|
||||
FACE_SWAPPER = None
|
||||
@@ -25,7 +26,6 @@ models_dir = os.path.join(
|
||||
os.path.dirname(os.path.dirname(os.path.dirname(abs_dir))), "models"
|
||||
)
|
||||
|
||||
|
||||
def pre_check() -> bool:
|
||||
download_directory_path = abs_dir
|
||||
conditional_download(
|
||||
@@ -93,11 +93,17 @@ def swap_face(source_face: Face, target_face: Face, temp_frame: Frame) -> Frame:
|
||||
swapped_frame = draw_mouth_mask_visualization(
|
||||
swapped_frame, target_face, mouth_mask_data
|
||||
)
|
||||
opacity = getattr(modules.globals, "opacity", 1.0)
|
||||
swapped_frame = cv2.addWeighted(temp_frame, 1 - opacity, swapped_frame, opacity, 0)
|
||||
|
||||
|
||||
return swapped_frame
|
||||
|
||||
|
||||
def process_frame(source_face: Face, temp_frame: Frame) -> Frame:
|
||||
if getattr(modules.globals, "opacity", 1.0) == 0:
|
||||
return temp_frame
|
||||
|
||||
if modules.globals.color_correction:
|
||||
temp_frame = cv2.cvtColor(temp_frame, cv2.COLOR_BGR2RGB)
|
||||
|
||||
@@ -114,6 +120,9 @@ def process_frame(source_face: Face, temp_frame: Frame) -> Frame:
|
||||
|
||||
|
||||
def process_frame_v2(temp_frame: Frame, temp_frame_path: str = "") -> Frame:
|
||||
if getattr(modules.globals, "opacity", 1.0) == 0:
|
||||
return temp_frame
|
||||
|
||||
if is_image(modules.globals.target_path):
|
||||
if modules.globals.many_faces:
|
||||
source_face = default_source_face()
|
||||
|
||||
+32
-3
@@ -27,6 +27,7 @@ from modules.utilities import (
|
||||
)
|
||||
from modules.video_capture import VideoCapturer
|
||||
from modules.gettext import LanguageManager
|
||||
from modules import globals
|
||||
import platform
|
||||
|
||||
if platform.system() == "Windows":
|
||||
@@ -160,12 +161,12 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
|
||||
select_face_button = ctk.CTkButton(
|
||||
root, text=_("Select a face"), cursor="hand2", command=lambda: select_source_path()
|
||||
)
|
||||
select_face_button.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)
|
||||
select_face_button.place(relx=0.1, rely=0.375, relwidth=0.3, relheight=0.1)
|
||||
|
||||
swap_faces_button = ctk.CTkButton(
|
||||
root, text="↔", cursor="hand2", command=lambda: swap_faces_paths()
|
||||
)
|
||||
swap_faces_button.place(relx=0.45, rely=0.4, relwidth=0.1, relheight=0.1)
|
||||
swap_faces_button.place(relx=0.45, rely=0.375, relwidth=0.1, relheight=0.1)
|
||||
|
||||
select_target_button = ctk.CTkButton(
|
||||
root,
|
||||
@@ -173,7 +174,35 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
|
||||
cursor="hand2",
|
||||
command=lambda: select_target_path(),
|
||||
)
|
||||
select_target_button.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
|
||||
select_target_button.place(relx=0.6, rely=0.375, relwidth=0.3, relheight=0.1)
|
||||
|
||||
transparency_values = ["0%","25%", "50%", "75%", "100%"]
|
||||
transparency_var = ctk.StringVar(value="100%") # Default to 100%
|
||||
|
||||
def on_transparency_change(value: str):
|
||||
percentage = int(value.strip('%'))
|
||||
modules.globals.opacity = percentage / 100.0
|
||||
|
||||
if percentage == 0:
|
||||
modules.globals.fp_ui["face_enhancer"] = False
|
||||
update_status("Transparency set to 0% - Face swapping disabled.")
|
||||
elif percentage == 100:
|
||||
modules.globals.face_swapper_enabled = True
|
||||
update_status("Transparency set to 100%.")
|
||||
else:
|
||||
modules.globals.face_swapper_enabled = True
|
||||
update_status(f"Transparency set to {value}")
|
||||
|
||||
transparency_label = ctk.CTkLabel(root, text="Transparency:")
|
||||
transparency_label.place(relx=0.1, rely=0.5, relwidth=0.2, relheight=0.05)
|
||||
|
||||
transparency_dropdown = ctk.CTkOptionMenu(
|
||||
root,
|
||||
values=transparency_values,
|
||||
variable=transparency_var,
|
||||
command=on_transparency_change,
|
||||
)
|
||||
transparency_dropdown.place(relx=0.35, rely=0.5, relwidth=0.25, relheight=0.05)
|
||||
|
||||
keep_fps_value = ctk.BooleanVar(value=modules.globals.keep_fps)
|
||||
keep_fps_checkbox = ctk.CTkSwitch(
|
||||
|
||||
Reference in New Issue
Block a user