{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/stableanimator-high-quality-identity","title":"StableAnimator: High-Quality Identity-Preserving Human Image Animation","arxiv_id":"2411.17697","date":"2024-11-26","proceeding":"CVPR 2025 1","authors":["Shuyuan Tu","Zhen Xing","Xintong Han","Zhi-Qi Cheng","Qi Dai","Chong Luo","Zuxuan Wu"],"abstract":"Current diffusion models for human image animation struggle to ensure identity (ID) consistency. This paper presents StableAnimator, the first end-to-end ID-preserving video diffusion framework, which synthesizes high-quality videos without any post-processing, conditioned on a reference image and a sequence of poses. Building upon a video diffusion model, StableAnimator contains carefully designed modules for both training and inference striving for identity consistency. In particular, StableAnimator begins by computing image and face embeddings with off-the-shelf extractors, respectively and face embeddings are further refined by interacting with image embeddings using a global content-aware Face Encoder. Then, StableAnimator introduces a novel distribution-aware ID Adapter that prevents interference caused by temporal layers while preserving ID via alignment. During inference, we propose a novel Hamilton-Jacobi-Bellman (HJB) equation-based optimization to further enhance the face quality. We demonstrate that solving the HJB equation can be integrated into the diffusion denoising process, and the resulting solution constrains the denoising path and thus benefits ID preservation. Experiments on multiple benchmarks show the effectiveness of StableAnimator both qualitatively and quantitatively.","url_abs":"https://arxiv.org/abs/2411.17697v2","url_pdf":"https://arxiv.org/pdf/2411.17697v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"stableanimator-high-quality-identity","repo_url":"https://github.com/Francis-Rings/StableAnimator","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"denoising","task_name":"Denoising"},{"task_slug":"face-reenactment","task_name":"Face Reenactment"},{"task_slug":"human-animation","task_name":"Human Animation"},{"task_slug":"image-animation","task_name":"Image Animation"},{"task_slug":"subject-driven-video-generation","task_name":"Subject-driven Video Generation"},{"task_slug":"video-generation","task_name":"Video Generation"}],"methods":[{"method_slug":"adapter","method_name":"Adapter"},{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2411.17697","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2411.17697"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Francis-Rings/StableAnimator","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"unverified":10},"by_repo_kind":{"official":{"samples":11,"ran":1,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"5105747c2711b1cb","entry":"FeedForward","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"animation/modules/id_encoder.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/animation/modules/id_encoder.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5105747c2711b1cb"}},{"code_sha256_prefix":"d5db4dc031f72a81","entry":"alpha_blend_color","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"DWPose/skeleton_extraction.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/DWPose/skeleton_extraction.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d5db4dc031f72a81"}},{"code_sha256_prefix":"b40e78b0b1ea6160","entry":"create_image_grid","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"train_single.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/train_single.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b40e78b0b1ea6160"}},{"code_sha256_prefix":"68e1817b5a0cb440","entry":"draw_bodypose","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"DWPose/skeleton_extraction.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/DWPose/skeleton_extraction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"68e1817b5a0cb440"}},{"code_sha256_prefix":"44ef0c50e1ed61e7","entry":"draw_bodypose_aligned","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"DWPose/training_skeleton_extraction.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/DWPose/training_skeleton_extraction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"44ef0c50e1ed61e7"}},{"code_sha256_prefix":"b408758fe55668b9","entry":"draw_handpose","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"DWPose/skeleton_extraction.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/DWPose/skeleton_extraction.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b408758fe55668b9"}},{"code_sha256_prefix":"1e8a79e43e77ad58","entry":"draw_handpose_aligned","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"DWPose/training_skeleton_extraction.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/DWPose/training_skeleton_extraction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1e8a79e43e77ad58"}},{"code_sha256_prefix":"66ae98065714bafd","entry":"load_images_from_folder","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"inference_basic.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/inference_basic.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"66ae98065714bafd"}},{"code_sha256_prefix":"b6014c1c431aa69e","entry":"load_images_from_folder","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"train_single.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/train_single.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b6014c1c431aa69e"}},{"code_sha256_prefix":"4cb2e2a2ca0bec9f","entry":"reshape_tensor","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"animation/modules/id_encoder.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/animation/modules/id_encoder.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4cb2e2a2ca0bec9f"}},{"code_sha256_prefix":"f38487057d980dce","entry":"validate_and_convert_image","repo":"Francis-Rings/StableAnimator","repo_kind":"official","path":"train_single.py","file_url":"https://github.com/Francis-Rings/StableAnimator/blob/HEAD/train_single.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f38487057d980dce"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}