{"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/phantom-subject-consistent-video-generation","title":"Phantom: Subject-consistent video generation via cross-modal alignment","arxiv_id":"2502.11079","date":"2025-02-16","proceeding":null,"authors":["Lijie Liu","Tianxiang Ma","Bingchuan Li","Zhuowei Chen","Jiawei Liu","Qian He","Xinglong Wu"],"abstract":"The continuous development of foundational models for video generation is evolving into various applications, with subject-consistent video generation still in the exploratory stage. We refer to this as Subject-to-Video, which extracts subject elements from reference images and generates subject-consistent video through textual instructions. We believe that the essence of subject-to-video lies in balancing the dual-modal prompts of text and image, thereby deeply and simultaneously aligning both text and visual content. To this end, we propose Phantom, a unified video generation framework for both single and multi-subject references. Building on existing text-to-video and image-to-video architectures, we redesign the joint text-image injection model and drive it to learn cross-modal alignment via text-image-video triplet data. In particular, we emphasize subject consistency in human generation, covering existing ID-preserving video generation while offering enhanced advantages. The project homepage is here https://phantom-video.github.io/Phantom/.","url_abs":"https://arxiv.org/abs/2502.11079v1","url_pdf":"https://arxiv.org/pdf/2502.11079v1.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":"phantom-subject-consistent-video-generation","repo_url":"https://github.com/phantom-video/phantom","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"human-domain-subject-to-video","task_name":"Human-Domain Subject-to-Video"},{"task_slug":"open-domain-subject-to-video","task_name":"Open-Domain Subject-to-Video"},{"task_slug":"single-domain-subject-to-video","task_name":"Single-Domain Subject-to-Video"},{"task_slug":null,"task_name":"Triplet"},{"task_slug":"video-generation","task_name":"Video Generation"},{"task_slug":"cross-modal-alignment","task_name":"cross-modal alignment"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/open-domain-subject-to-video-on-opens2v-eval","task":"Open-Domain Subject-to-Video","dataset":"OpenS2V-Eval","model":"Phantom-Wan-14B","rank_in_archive_order":3,"of":10,"metrics":{"Aesthetics":"0.4639","FaceSim":"0.5148","GmeScore":"0.7065","Motion":"0.3342","NaturalScore":"0.6866","NexusScore":"0.3743","Total Score":"0.5232","Venue":"Open-Source"},"uses_additional_data":false},{"leaderboard":"/sota/open-domain-subject-to-video-on-opens2v-eval","task":"Open-Domain Subject-to-Video","dataset":"OpenS2V-Eval","model":"Phantom-Wan-1.3B","rank_in_archive_order":4,"of":10,"metrics":{"Aesthetics":"0.4667","FaceSim":"0.4855","GmeScore":"0.6942","Motion":"0.1429","NaturalScore":"0.7026","NexusScore":"0.4244","Total Score":"0.5071","Venue":"Open-Source"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2502.11079","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2502.11079"}},"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/phantom-video/phantom","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_draft_wrong":2,"ran_fixture":1,"unverified":9},"by_repo_kind":{"listed":{"samples":12,"ran":3,"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":"98f385d847636a3e","entry":"basic_clean","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/tokenizers.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/tokenizers.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"98f385d847636a3e"}},{"code_sha256_prefix":"e34a97853e924d88","entry":"sinusoidal_embedding_1d","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/model.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/model.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e34a97853e924d88"}},{"code_sha256_prefix":"9542161e9640b858","entry":"whitespace_clean","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/tokenizers.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/tokenizers.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9542161e9640b858"}},{"code_sha256_prefix":"2659ec11ef2cea0d","entry":"attention","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/attention.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/attention.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2659ec11ef2cea0d"}},{"code_sha256_prefix":"1066f2140d4e9845","entry":"canonicalize","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/tokenizers.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/tokenizers.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1066f2140d4e9845"}},{"code_sha256_prefix":"78d2ce0959095290","entry":"count_conv3d","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/vae.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/vae.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"78d2ce0959095290"}},{"code_sha256_prefix":"7ea44a4680b76539","entry":"flash_attention","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/attention.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/attention.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7ea44a4680b76539"}},{"code_sha256_prefix":"d3d53f877a9af3a3","entry":"fp16_clamp","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/t5.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/t5.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d3d53f877a9af3a3"}},{"code_sha256_prefix":"cbc3565ced3e12b6","entry":"pos_interpolate","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/clip.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/clip.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cbc3565ced3e12b6"}},{"code_sha256_prefix":"3571f7fc8c1b5da7","entry":"rope_apply","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/model.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3571f7fc8c1b5da7"}},{"code_sha256_prefix":"b81485ecf664d0d5","entry":"rope_params","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/model.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b81485ecf664d0d5"}},{"code_sha256_prefix":"dd27a4bda5e8824c","entry":"xlm_roberta_large","repo":"phantom-video/phantom","repo_kind":"listed","path":"phantom_wan/modules/xlm_roberta.py","file_url":"https://github.com/phantom-video/phantom/blob/HEAD/phantom_wan/modules/xlm_roberta.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dd27a4bda5e8824c"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}