* Split provider hooks into override/adjust with cached CoreML base
Replace the single resolve_inference_providers processor hook with two:
override_inference_providers (full replacement) and adjust_inference_providers
(merge options onto the base providers built by create_inference_providers).
This lets CoreML processors inherit ModelCacheDirectory + SpecializationStrategy
from the base while layering ModelFormat/MLComputeUnits on top.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HTQCZiYjJyUX11bDpbRSiB
* fix caching for execution provider by having override and adjust ways
* fix caching for execution provider by having override and adjust ways
* fix lint
* use proper pytest fixtures
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* tons of renaming
* tons of renaming
* multi reader approach
* bring tests to an okay-ish state
* bring drain back
* improve read_video_frame speed
* rename method
* patch 3.7.1
* fix bug for 2 processors on image to image pipeline (#1177)
* reduce default value of target_frame_amount
* restore old performance
* restore old performance
* restore old performance
* restore old performance
* mark as next, introduce dynamic scale for face debugger
* use latest onnxruntime
* update within Gradio 5
* Remove system memory limit (#986)
* remove system memory limit from ui
* remove system memory limit from args.py
* flatten the face store
* prevent countless importlib.import_module calls
* remove --onnxruntime from install.py
* remove --onnxruntime from install.py
* resolve static inference providers to fix macos (#1127)
* resolve static inference providers to fix macos
* fix lint
* restore old behaviour
* restore old behaviour
* handle ghost and uniface as well
* adjust condition for ghost and uniface
* fix Gradio gallery styles
* remove face store (#1132)
* fix dataflow in streamer
* Face selector auto mode (#1137)
* introduce face selector auto mode
* introduce face selector auto mode
* introduce face selector auto mode
* correct way is to pass source_vision_frames
* make the world a better place
* fix dataflow in faceswapper, no read of files withing inner methods (#1148)
* fix dataflow in faceswapper, no read of files withing inner methods
* fix lint
* adjust code more
* adjust code more
* bring back the face store but for source and reference only (#1149)
* bring back the face store but for source and reference only
* fix ci
* minor improvement
* guard for tobytes()
* drop condition in select_faces()
* Replace CONFIG_PARSER global with @lru_cache (#1147)
* remove global config_parser
* fix import order
* remove lambda
* remove unused block
* optimize app context detection
* decouple common modules from core (#1152)
* decouple common modules from core
* remove that nonsense
* remove that nonsense
* minor adjustment to workflows
* Tag HEVC output as hvc1 and move moov atom to the front (#1153)
* Tag HEVC output as hvc1 and move moov atom to the front
ffmpeg defaults HEVC in MP4 to the 'hev1' sample entry and leaves the moov
atom at the tail. Apple players (QuickTime, Finder QuickLook) refuse to decode
'hev1' and stall reading a tail-placed moov on large files, so hevc_nvenc /
libx265 renders cannot be previewed on macOS.
- add ffmpeg_builder.set_video_tag(): emit `-tag:v hvc1` for every HEVC
encoder (libx265, hevc_nvenc, hevc_amf, hevc_qsv, hevc_videotoolbox).
Applied in merge_video where the encoder is known; `-c:v copy` in the audio
mux / concat steps preserves the tag.
- add ffmpeg_builder.set_faststart(): emit `-movflags +faststart`, applied in
restore_audio / replace_audio / concat_video which write the final output.
H.264 and other codecs are left untouched. Verified on a real hevc_nvenc
render: hev1 hung QuickLook (no thumbnail); after the patch the file is hvc1
with a front-placed moov and QuickLook generates a thumbnail.
* Restrict hvc1 tag and faststart to quicktime containers
Gate set_video_tag / set_faststart on the output container format
(m4v, mov, mp4) via get_file_format(), so non-quicktime muxers no longer
receive -tag:v hvc1 / -movflags +faststart. Trim test_set_video_tag to a
single positive and negative assertion.
Addresses review on #1153.
* Move hvc1 tag and faststart gates into ffmpeg_builder
Rename set_video_tag / set_faststart to conditional_* and push the
container-format gate (m4v, mov, mp4) inside the builders, keeping
ffmpeg.py free of inline conditionals. Matches the set_image_quality
pattern. Addresses review on #1153.
* post cleanup after merge
* Pack target frames (#1158)
* pack target frames
* add todos
* add todos, resolve todos
* resolve todos
* change names
* revert to single target frame for select faces
* fix lint
* return empty frame
* get() have no default
* Fix trim (#1162)
* fix trim
* fix trim
* rename ffmpeg builder method
* rename to temp_frame_set and temp_frame_pattern
---------
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
* Implement face tracker (#1163)
* add face tracker
* change get_nearest_track_face -> get_nearest_track_index
* create face_creator.py and move methods around
* add type FaceTrack
* naming
* remove iou test, don't belong there
* fix spaces
* rename to interpolate_points
* rename to find_best_face_track
* just track_faces
* cleanp
* previous next naming
* remove >= and >=
* rename
* remove helper from test and use face from source.jpg
* make get_anchor_indices more readable
* track_faces() call before and is forwarded to select_faces
* change to interpolate_faces
* rename methods
* rename methods
* rename variables
* remove dtype
* move face_anlyser -> face_creator
* claenup face_creator.py
* move tests to dedicated test face detector
* move tracking inside select_faces
* simplify face_tracker (#1165)
* minor renaming
* improve face_tracker test (#1166)
* improve face_tracker test
* cleanup
* Add target frame amount (#1167)
* introduce --target-frame-amount
* add ui
* make track_faces conditional
* update choices.py
* fix []
* rename component file to frame_process.py
* fix track preview (#1168)
* introduce face origin (#1169)
* add guard to prevent failure
* show and hide voice extractor according to lip syncer
* rename average_face_coordinates to average_face_geometry
* use static faces for select_faces()
* face store with lock (#1171)
* face store with lock
* face store with lock
* remove refill color from bbox
* adjust tests and handle frame_position proper way
* enforce similar naming
* introduce face tracker score
* introduce face tracker score
* fix/audio-trim-alignment (#1173)
* fix audio offset
* fix audio offset
* remove reference_frame_number check
---------
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
* reduce face tracker score from 0 to 0.5
* mark as 3.7.0
* make face tracker stateless
---------
Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
Co-authored-by: kazuki nakai <kazuki.nakai@agiletec.net>
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
* Avast intercepts ssl cert and breaks curl
* modernize dependencies
* fix sanitizer for int range
* comment out tests
* disable testing for CI
* disable testing for CI
* mark as next
* add fran model
* add support for corridor key (#1060)
* introduce despill color
* simplify the apply dispill color
* finalize naming for both fill and despill
* follow vision_frame convension
* patch fran model
* adjust fran urls
* Feat/dynamic env setup (#1061)
* dynamic environment setup
* dynamic environment setup
* fix fran model
* prevent directml using incompatible corridor_key model
* fix environment setup for windows
* switch to corridor_key_1024 and corridor_key_2048
* switch to corridor_key_1024 and corridor_key_2048
* mark it as 3.6.0
* rename environment to conda
* rename environment to conda
* fix testing for face analyser
* some background remove cosmetics
* some background remove cosmetics
* some background remove cosmetics
* update preview
---------
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
* remove insecure flag from curl
* eleminate repating definitons
* limit processors and ui layouts by choices
* follow couple of v4 standards
* use more secure mkstemp
* dynamic cache path for execution providers
* fix benchmarker, prevent path traveling via job-id
* fix order in execution provider choices
* resort by prioroty
* introduce support for QNN
* close file description for Windows to stop crying
* prevent ConnectionResetError under windows
* needed for nested .caches directory as onnxruntime does not create it
* different approach to silent asyncio
* update dependencies
* simplify the name to just inference providers
* switch to trt_builder_optimization_level 4
Enforce consistent space inside square brackets for all list literals
across source and test files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
* honor webcam resolution to avoid stripe mismatch, update dependencies
* avoid version conflicts
* enforce prores video extraction to 8 bit
* make the installer more robust on execution switch
* make the installer more robust on execution switch
* improve the installer env handling
* different approach to handle env
* Mark as NEXT
* Reduce caching to avoid RAM explosion
* Reduce caching to avoid RAM explosion
* Update dependencies
* add face-detector-pad-factor
* update facefusion.ini
* fix test
* change pad to margin
* fix order
* add prepare margin
* use 50% max margin
* Minor fixes part2
* Minor fixes part3
* Minor fixes part4
* Minor fixes part1
* Downgrade onnxruntime as of BiRefNet broken on CPU
add test
update
update facefusion.ini
add birefnet
* rename models
add more models
* Fix versions
* Add .claude to gitignore
* add normalize color
add 4 channel
add colors
* worflows
* cleanup
* cleanup
* cleanup
* cleanup
* add more models (#961)
* Fix naming
* changes
* Fix style and mock Gradio
* Fix style and mock Gradio
* Fix style and mock Gradio
* apply clamp
* remove clamp
* Add normalizer test
* Introduce sanitizer for the rescue (#963)
* Introduce sanitizer for the rescue
* Introduce sanitizer for the rescue
* Introduce sanitizer for the rescue
* prepare ffmpeg for alpha support
* Some cleanup
* Some cleanup
* Fix CI
* List as TypeAlias is not allowed (#967)
* List as TypeAlias is not allowed
* List as TypeAlias is not allowed
* List as TypeAlias is not allowed
* List as TypeAlias is not allowed
* Add mpeg and mxf support (#968)
* Add mpeg support
* Add mxf support
* Adjust fix_xxx_encoder for the new formats
* Extend output pattern for batch-run (#969)
* Extend output pattern for batch-run
* Add {target_extension} to allowed mixed files
* Catch invalid output pattern keys
* alpha support
* cleanup
* cleanup
* add ProcessorOutputs type
* fix preview and streamer, support alpha for background_remover
* Refactor/open close processors (#972)
* Introduce open/close processors
* Add locales for translator
* Introduce __autoload__ for translator
* More cleanup
* Fix import issues
* Resolve the scope situation for locals
* Fix installer by not using translator
* Fixes after merge
* Fixes after merge
* Fix translator keys in ui
* Use LOCALS in installer
* Update and partial fix DirectML
* Use latest onnxruntime
* Fix performance
* Fix lint issues
* fix mask
* fix lint
* fix lint
* Remove default from translator.get()
* remove 'framerate='
* fix test
* Rename and reorder models
* Align naming
* add alpha preview
* fix frame-by-frame
* Add alpha effect via css
* preview support alpha channel
* fix preview modes
* Use official assets repositories
* Add support for u2net_cloth
* fix naming
* Add more models
* Add vendor, license and year direct to the models
* Add vendor, license and year direct to the models
* Update dependencies, Minor CSS adjustment
* Ready for 3.5.0
* Fix naming
* Update about messages
* Fix return
* Use groups to show/hide
* Update preview
* Conditional merge mask
* Conditional merge mask
* Fix import order
---------
Co-authored-by: harisreedhar <h4harisreedhar.s.s@gmail.com>
Co-authored-by: Harisreedhar <46858047+harisreedhar@users.noreply.github.com>
* Fix preview when using frame enhancer
* Fix version conflict numpy vs. cv2
* Use latest numpy
* Introduce scale_face() to match size of temp frames and target frames
* Remove hardcoded backend for camera under Windows
* Up and downgrade some dependencies
* Up and downgrade some dependencies
* Up and downgrade some dependencies