Commit Graph

55 Commits

Author SHA1 Message Date
henryruhs 84ad32912e fix macos 2026-03-31 19:09:54 +02:00
henryruhs e949b1619a add meaningful tests 2026-03-31 17:51:13 +02:00
henryruhs c808cdd5b9 cleanup code part1 2026-03-31 16:55:38 +02:00
Harisreedhar 6bb62cf64e Assets ffmpeg stream upload (#1069)
* ffmpeg sanitize

* fix type

* fix type

* add config

* ChunkQueue -> UploadQueue

* revert assets.py

* move resolve methods to ffmpeg_builder.py

* Refactor ffmpeg.py

* Remove partial import

* improve test

* remove put(None)

* cleanup

* without poll() not working

* ChunkReader -> MediaChunkReader

* improve assert by replacing generic is_file

* naming and cleanup
2026-03-31 16:31:02 +02:00
Harisreedhar aa9701fdfe Fix hardcoded fps (#1068)
* fix hardcoded fps

* fallback to temp_fps when output_video_fps is None

* fix test_ffmpeg

* change temp-fps -> output-audio-fps

* cleanup

* cleanup
2026-03-25 19:06:14 +05:30
Henry Ruhs 0d0c27b117 asset validation and image encoder lookup (#1058)
* asset validation and image encoder lookup

* asset validation and image encoder lookup

* asset validation and image encoder lookup
2026-03-17 14:03:34 +01:00
Harisreedhar ab24cd3f2e Implement basic webrtc stream (#1054)
* implement basic webrtc_stream

* add aiortc to requirements.txt

* update aiortc version

* rename variables with rtc_ prefix

* changes

* changes

* change helper to assert_helper and stream_helper

* rename variables with rtc_ prefix

* add error handling

* return whole connection

* remove monkey patch and some cleaning

* cleanup

* tiny adjustments

* tiny adjustments

* proper typing and naming for rtc offer set

* - remove async from on_video_track method
- rename source -> target
- add audio

* audio always before video

---------

Co-authored-by: henryruhs <info@henryruhs.com>
2026-03-17 14:02:40 +01:00
harisreedhar 8cee58b0b1 image to video as sequence 2026-03-17 14:01:49 +01:00
Henry Ruhs 38a7da5a26 Add simple path isolation (#992) 2026-03-17 14:01:49 +01:00
harisreedhar 0625e84e78 update ffmpeg.set_loop
add test

introduce spawn_frames
2026-03-17 14:01:49 +01:00
harisreedhar 6cbcd327bf Part 2 2026-03-17 14:01:49 +01:00
harisreedhar 320131772b Part 2 2026-03-17 14:01:49 +01:00
harisreedhar 1f485d0230 part 1 2026-03-17 14:01:49 +01:00
harisreedhar 5faff3b03e changes 2026-03-17 14:01:38 +01:00
harisreedhar 878c738a94 changes 2026-03-17 14:01:38 +01:00
harisreedhar 562a28c342 changes 2026-03-17 14:01:38 +01:00
harisreedhar 5ca7f3d0dc refactor temp handling from target-path to output-path 2026-03-17 14:01:38 +01:00
harisreedhar 820134698b remove output_path argument 2026-03-17 14:01:28 +01:00
harisreedhar 49b6acfecf remove output_path argument from merge_video() 2026-03-17 14:01:28 +01:00
harisreedhar 14c9aef764 remove output_video_fps argument from merge_video() 2026-03-17 14:01:28 +01:00
harisreedhar da42377219 fix 2026-03-17 14:01:28 +01:00
harisreedhar 0de966d794 remove same file extension constraint 2026-03-17 14:01:28 +01:00
Henry Ruhs da0da3a4b4 Next (#945)
* Rename calcXXX to calculateXXX

* Add migraphx support

* Add migraphx support

* Add migraphx support

* Add migraphx support

* Add migraphx support

* Add migraphx support

* Use True for the flags

* Add migraphx support

* add face-swapper-weight

* add face-swapper-weight to facefusion.ini

* changes

* change choice

* Fix typing for xxxWeight

* Feat/log inference session (#906)

* Log inference session, Introduce time helper

* Log inference session, Introduce time helper

* Log inference session, Introduce time helper

* Log inference session, Introduce time helper

* Mark as NEXT

* Follow industry standard x1, x2, y1 and y2

* Follow industry standard x1, x2, y1 and y2

* Follow industry standard in terms of naming (#908)

* Follow industry standard in terms of naming

* Improve xxx_embedding naming

* Fix norm vs. norms

* Reduce timeout to 5

* Sort out voice_extractor once again

* changes

* Introduce many to the occlusion mask (#910)

* Introduce many to the occlusion mask

* Then we use minimum

* Add support for wmv

* Run platform tests before has_execution_provider (#911)

* Add support for wmv

* Introduce benchmark mode (#912)

* Honestly makes no difference to me

* Honestly makes no difference to me

* Fix wording

* Bring back YuNet (#922)

* Reintroduce YuNet without cv2 dependency

* Fix variable naming

* Avoid RGB to YUV colorshift using libx264rgb

* Avoid RGB to YUV colorshift using libx264rgb

* Make libx264 the default again

* Make libx264 the default again

* Fix types in ffmpeg builder

* Fix quality stuff in ffmpeg builder

* Fix quality stuff in ffmpeg builder

* Add libx264rgb to test

* Revamp Processors (#923)

* Introduce new concept of pure target frames

* Radical refactoring of process flow

* Introduce new concept of pure target frames

* Fix webcam

* Minor improvements

* Minor improvements

* Use deque for video processing

* Use deque for video processing

* Extend the video manager

* Polish deque

* Polish deque

* Deque is not even used

* Improve speed with multiple futures

* Fix temp frame mutation and

* Fix RAM usage

* Remove old types and manage method

* Remove execution_queue_count

* Use init_state for benchmarker to avoid issues

* add voice extractor option

* Change the order of voice extractor in code

* Use official download urls

* Use official download urls

* add gui

* fix preview

* Add remote updates for voice extractor

* fix crash on headless-run

* update test_job_helper.py

* Fix it for good

* Remove pointless method

* Fix types and unused imports

* Revamp reference (#925)

* Initial revamp of face references

* Initial revamp of face references

* Initial revamp of face references

* Terminate find_similar_faces

* Improve find mutant faces

* Improve find mutant faces

* Move sort where it belongs

* Forward reference vision frame

* Forward reference vision frame also in preview

* Fix reference selection

* Use static video frame

* Fix CI

* Remove reference type from frame processors

* Improve some naming

* Fix types and unused imports

* Fix find mutant faces

* Fix find mutant faces

* Fix imports

* Correct naming

* Correct naming

* simplify pad

* Improve webcam performance on highres

* Camera manager (#932)

* Introduce webcam manager

* Fix order

* Rename to camera manager, improve video manager

* Fix CI

* Remove optional

* Fix naming in webcam options

* Avoid using temp faces (#933)

* output video scale

* Fix imports

* output image scale

* upscale fix (not limiter)

* add unit test scale_resolution & remove unused methods

* fix and add test

* fix

* change pack_resolution

* fix tests

* Simplify output scale testing

* Fix benchmark UI

* Fix benchmark UI

* Update dependencies

* Introduce REAL multi gpu support using multi dimensional inference pool (#935)

* Introduce REAL multi gpu support using multi dimensional inference pool

* Remove the MULTI:GPU flag

* Restore "processing stop"

* Restore "processing stop"

* Remove old templates

* Go fill in with caching

* add expression restorer areas

* re-arrange

* rename method

* Fix stop for extract frames and merge video

* Replace arcface_converter models with latest crossface models

* Replace arcface_converter models with latest crossface models

* Move module logs to debug mode

* Refactor/streamer (#938)

* Introduce webcam manager

* Fix order

* Rename to camera manager, improve video manager

* Fix CI

* Fix naming in webcam options

* Move logic over to streamer

* Fix streamer, improve webcam experience

* Improve webcam experience

* Revert method

* Revert method

* Improve webcam again

* Use release on capture instead

* Only forward valid frames

* Fix resolution logging

* Add AVIF support

* Add AVIF support

* Limit avif to unix systems

* Drop avif

* Drop avif

* Drop avif

* Default to Documents in the UI if output path is not set

* Update wording.py (#939)

"succeed" is grammatically incorrect in the given context. To succeed is the infinitive form of the verb. Correct would be either "succeeded" or alternatively a form involving the noun "success".

* Fix more grammar issue

* Fix more grammar issue

* Sort out caching

* Move webcam choices back to UI

* Move preview options to own file (#940)

* Fix Migraphx execution provider

* Fix benchmark

* Reuse blend frame method

* Fix CI

* Fix CI

* Fix CI

* Hotfix missing check in face debugger, Enable logger for preview

* Fix reference selection (#942)

* Fix reference selection

* Fix reference selection

* Fix reference selection

* Fix reference selection

* Side by side preview (#941)

* Initial side by side preview

* More work on preview, remove UI only stuff from vision.py

* Improve more

* Use fit frame

* Add different fit methods for vision

* Improve preview part2

* Improve preview part3

* Improve preview part4

* Remove none as choice

* Remove useless methods

* Fix CI

* Fix naming

* use 1024 as preview resolution default

* Fix fit_cover_frame

* Uniform fit_xxx_frame methods

* Add back disabled logger

* Use ui choices alias

* Extract select face logic from processors (#943)

* Extract select face logic from processors to use it for face by face in preview

* Fix order

* Remove old code

* Merge methods

* Refactor face debugger (#944)

* Refactor huge method of face debugger

* Remove text metrics from face debugger

* Remove useless copy of temp frame

* Resort methods

* Fix spacing

* Remove old method

* Fix hard exit to work without signals

* Prevent upscaling for face-by-face

* Switch to version

* Improve exiting

---------

Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
Co-authored-by: Rafael Tappe Maestro <rafael@tappemaestro.com>
2025-09-08 10:43:58 +02:00
henryruhs 1e0f6890d5 Update preview 2025-06-22 11:52:22 +02:00
henryruhs 854f895403 Introduce fix_audio_encoder and fix_video_encoder 2025-05-25 18:02:37 +02:00
henryruhs 84e86ad91e Improve testing 2025-05-25 15:45:38 +02:00
henryruhs 441305afe5 Improve testing 2025-05-25 15:37:41 +02:00
henryruhs 3c36440262 More testing for audio restore/replace and video merge 2025-05-24 21:00:19 +02:00
henryruhs f9b906850b Stub get_available_encoder_set() 2025-05-23 23:05:56 +02:00
henryruhs 5b37c9b45b CI is very sensitive 2025-05-23 22:25:52 +02:00
henryruhs b1786ddd0b CI is very sensitive 2025-05-23 22:25:01 +02:00
henryruhs 7c65323558 CI is very sensitive 2025-05-23 22:05:48 +02:00
henryruhs 14bb3e32c2 Testing for merge_video() 2025-05-23 20:18:11 +02:00
henryruhs 068f6c86d1 More edge case testing 2025-05-23 19:20:56 +02:00
henryruhs fc0de4eec2 More edge case testing 2025-05-23 19:06:38 +02:00
henryruhs 834c17340d More edge case testing 2025-05-23 18:53:03 +02:00
henryruhs 04319fb3c6 More edge case testing 2025-05-23 13:09:54 +02:00
henryruhs 68da1cf266 More edge case testing 2025-05-23 09:17:51 +02:00
henryruhs 52000114ba Fix merge edge cases 2025-05-22 22:44:24 +02:00
henryruhs 23343eaa76 Testing for merge_video() 2025-05-22 20:58:46 +02:00
henryruhs 48aaba2786 Undo non-fixes 2025-04-28 10:03:25 +02:00
henryruhs aa1007ff6a Fix blank screen in replace_audio() 2025-04-28 10:03:25 +02:00
henryruhs 6732a82af4 Fix audio range in restore audio 2025-04-28 10:03:25 +02:00
henryruhs e79a99fac4 Skip the new test 2025-04-28 10:03:25 +02:00
henryruhs 5dc986d6b2 Skip the new test 2025-04-28 10:03:25 +02:00
Henry Ruhs d260c28cf3 Feat/available encoders (#860)
* Introduce available audio encoders and video encoders

* Introduce available audio encoders and video encoders

* Introduce available audio encoders and video encoders

* Introduce available audio encoders and video encoders

* Add flac to audio encoders
2025-04-28 10:03:25 +02:00
Henry Ruhs 8a9e08f3a2 Feat/commands builder (#852)
* Protype for ffmpeg builder

* Protype for ffmpeg builder

* Add curl builder

* Fix typing import

* Adjust commands indent

* Protype for ffmpeg builder part2

* Protype for ffmpeg builder part3

* Protype for ffmpeg builder part3

* Add chain() helper to the builders

* Protype for ffmpeg builder part4

* Protype for ffmpeg builder part5

* Protoype for ffmpeg builder part5

* Protoype for ffmpeg builder part6

* Allow dynamic audio size

* Fix testing

* Protoype for ffmpeg builder part7

* Fix and polish ffmpeg builder

* Hardcode the log level for ffmpeg

* More ffmpeg rework

* Prototype for ffmpeg builder part8

* Prototype for ffmpeg builder part9

* Fix CI

* Fix Styles

* Add lazy testing, User Agent for CURL

* More testing

* More testing
2025-04-28 10:03:24 +02:00
Henry Ruhs 5b76f54332 Feat/more audio settings (#849)
* Add more audio settings, revamp some ffmpeg commands

* Add more audio settings, revamp some ffmpeg commands

* Add more audio settings, revamp some ffmpeg commands

* Add more audio settings, revamp some ffmpeg commands
2025-04-28 10:03:24 +02:00
Henry Ruhs 6f0675030e Feat/custom file format handling (#845)
* Purge filetype dependency, Rename file_extension to file_format, Introduce custom format detections

* Changed a lot

* Purge filetype dependency, Rename file_extension to file_format, Introduce custom format detections

* Fix stuff

* Fix stuff

* Simplify all the is_ and has_ methods

* Simplify all the is_ and has_ methods

* Use the new helper on more places

* Introduce are_ next to is_ and has_

* Get rid of the type-ignores

* Add more video types
2025-04-28 10:03:24 +02:00
Henry Ruhs 7a09479fb5 3.1.0 (#839)
* Replace audio whenever set via source

* add H264_qsv&HEVC_qsv (#768)

* Update ffmpeg.py

* Update choices.py

* Update typing.py

* Fix spaces and newlines

* Fix return type

* Introduce hififace swapper

* Disable stream for expression restorer

* Webcam polishing part1 (#796)

* Cosmetics on ignore comments

* Testing for replace audio

* Testing for restore audio

* Testing for restore audio

* Fix replace_audio()

* Remove shortest and use fixed video duration

* Remove shortest and use fixed video duration

* Prevent duplicate entries to local PATH

* Do hard exit on invalid args

* Need for Python 3.10

* Fix state of face selector

* Fix OpenVINO by aliasing GPU.0 to GPU

* Fix OpenVINO by aliasing GPU.0 to GPU

* Fix/age modifier styleganex 512 (#798)

* fix

* styleganex template

* changes

* changes

* fix occlusion mask

* add age modifier scale

* change

* change

* hardcode

* Cleanup

* Use model_sizes and model_templates variables

* No need for prepare when just 2 lines of code

* Someone used spaces over tabs

* Revert back [0][0]

---------

Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>

* Feat/update gradio5 (#799)

* Update to Gradio 5

* Remove overrides for Gradio

* Fix dark mode for Gradio

* Polish errors

* More styles for tabs and co

* Make slider inputs and reset like a unit

* Make slider inputs and reset like a unit

* Adjust naming

* Improved color matching (#800)

* aura fix

* fix import

* move to vision.py

* changes

* changes

* changes

* changes

* further reduction

* add test

* better test

* change name

* Minor cleanup

* Minor cleanup

* Minor cleanup

* changes (#801)

* Switch to official assets repo

* Add __pycache__ to gitignore

* Gradio pinned python-multipart to 0.0.12

* Update dependencies

* Feat/temp path second try (#802)

* Terminate base directory from temp helper

* Partial adjust program codebase

* Move arguments around

* Make `-j` absolete

* Resolve args

* Fix job register keys

* Adjust date test

* Finalize temp path

* Update onnxruntime

* Update dependencies

* Adjust color for checkboxes

* Revert due terrible performance

* Fix/enforce vp9 for webm (#805)

* Simple fix to enforce vp9 for webm

* Remove suggest methods from program helper

* Cleanup ffmpeg.py a bit

* Update onnxruntime (second try)

* Update onnxruntime (second try)

* Remove cudnn_conv_algo_search tweaks

* Remove cudnn_conv_algo_search tweaks

* changes

* add both mask instead of multiply

* adaptive color correction

* changes

* remove model size requirement

* changes

* add to facefusion.ini

* changes

* changes

* changes

* Add namespace for dfm creators

* Release five frame enhancer models

* Remove vendor from model name

* Remove vendor from model name

* changes

* changes

* changes

* changes

* Feat/download providers (#809)

* Introduce download providers

* update processors download method

* add ui

* Fix CI

* Adjust UI component order, Use download resolver for benchmark

* Remove is_download_done()

* Introduce download provider set, Remove choices method from execution, cast all dict keys() via list()

* Fix spacing

---------

Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>

* Fix model paths for 3.1.0

* Introduce bulk-run (#810)

* Introduce bulk-run

* Make bulk run bullet proof

* Integration test for bulk-run

* new alignment

* Add safer global named resolve_file_pattern() (#811)

* Allow bulk runner with target pattern only

* changes

* changes

* Update Python to 3.12 for CI (#813)

* changes

* Improve NVIDIA device lookups

* Rename template key to deepfacelive

* Fix name

* Improve resolve download

* Rename bulk-run to batch-run

* Make deep swapper inputs universal

* Add more deepfacelive models

* Use different morph value

* Feat/simplify hashes sources download (#814)

* Extract download directory path from assets path

* Fix lint

* Fix force-download command, Fix urls in frame enhancer

* changes

* fix warp_face_by_bounding_box dtype error

* DFM Morph (#816)

* changes

* Improve wording, Replace [None], SideQuest: clean forward() of age modifier

* SideQuest: clean forward() of face enhancer

---------

Co-authored-by: henryruhs <info@henryruhs.com>

* Fix preview refresh after slide

* Add more deepfacelive models (#817)

* Add more deepfacelive models

* Add more deepfacelive models

* Fix deep swapper sizes

* Kill accent colors, Number input styles for Chrome

* Simplify thumbnail-item looks

* Fix first black screen

* Introduce model helper

* ci.yml: Add macOS on ARM64 to the testing (#818)

* ci.yml: Add macOS on ARM64 to the testing

* ci.yml: uses: AnimMouse/setup-ffmpeg@v1

* ci.yml: strategy: matrix: os: macos-latest,

* - name: Set up FFmpeg

* Update .github/workflows/ci.yml

* Update ci.yml

---------

Co-authored-by: Henry Ruhs <info@henryruhs.com>

* Show/hide morph slider for deep swapper (#822)

* remove dfl_head and update dfl_whole_face template

* Add deep swapper models by Mats

* Add deep swapper models by Druuzil

* Add deep swapper models by Rumateus

* Implement face enhancer weight for codeformer, Side Quest: has proces… (#823)

* Implement face enhancer weight for codeformer, Side Quest: has processor checks

* Fix typo

* Fix face enhancer blend in UI

* Use static model set creation

* Add deep swapper models by Jen

* Introduce create_static_model_set() everywhere (#824)

* Move clear over to the UI (#825)

* Fix model key

* Undo restore_audio()

* Switch to latest XSeg

* Switch to latest XSeg

* Switch to latest XSeg

* Use resolve_download_url() everywhere, Vanish --skip-download flag

* Fix resolve_download_url

* Fix space

* Kill resolve_execution_provider_keys() and move fallbacks where they belong

* Kill resolve_execution_provider_keys() and move fallbacks where they belong

* Remove as this does not work

* Change TempFrameFormat order

* Fix CoreML partially

* Remove duplicates (Rumateus is the creator)

* Add deep swapper models by Edel

* Introduce download scopes (#826)

* Introduce download scopes

* Limit download scopes to force-download command

* Change source-paths behaviour

* Fix space

* Update README

* Rename create_log_level_program to create_misc_program

* Fix wording

* Fix wording

* Update dependencies

* Use tolerant for video_memory_strategy in benchmark

* Feat/ffmpeg with progress (#827)

* FFmpeg with progress bar

* Fix typing

* FFmpeg with progress bar part2

* Restore streaming wording

* Change order in choices and typing

* Introduce File using list_directory() (#830)

* Feat/local deep swapper models (#832)

* Local model support for deep swapper

* Local model support for deep swapper part2

* Local model support for deep swapper part3

* Update yet another dfm by Druuzil

* Refactor/choices and naming (#833)

* Refactor choices, imports and naming

* Refactor choices, imports and naming

* Fix styles for tabs, Restore toast

* Update yet another dfm by Druuzil

* Feat/face masker models (#834)

* Introduce face masker models

* Introduce face masker models

* Introduce face masker models

* Register needed step keys

* Provide different XSeg models

* Simplify model context

* Fix out of range for trim frame, Fix ffmpeg extraction count (#836)

* Fix out of range for trim frame, Fix ffmpeg extraction count

* Move restrict of trim frame to the core, Make sure all values are within the range

* Fix and merge testing

* Fix typing

* Add region mask for deep swapper

* Adjust wording

* Move FACE_MASK_REGIONS to choices

* Update dependencies

* Feat/download provider fallback (#837)

* Introduce download providers fallback, Use CURL everywhre

* Fix CI

* Use readlines() over readline() to avoid while

* Use readlines() over readline() to avoid while

* Use readlines() over readline() to avoid while

* Use communicate() over wait()

* Minor updates for testing

* Stop webcam on source image change

* Feat/webcam improvements (#838)

* Detect available webcams

* Fix CI, Move webcam id dropdown to the sidebar, Disable warnings

* Fix CI

* Remove signal on hard_exit() to prevent exceptions

* Fix border color in toast timer

* Prepare release

* Update preview

* Update preview

* Hotfix progress bar

---------

Co-authored-by: DDXDB <38449595+DDXDB@users.noreply.github.com>
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
2024-12-24 12:46:56 +01:00