[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-facebookresearch--videoseal":3,"tool-facebookresearch--videoseal":64},[4,17,26,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,2,"2026-04-03T11:11:01",[13,14,15],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":23,"last_commit_at":32,"category_tags":33,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,34,35,36,15,37,38,13,39],"数据工具","视频","插件","其他","语言模型","音频",{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,38,37],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":16},519,"PaddleOCR","PaddlePaddle\u002FPaddleOCR","PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来，转换成计算机可读取的结构化数据，让机器真正“看懂”图文内容。\n\n面对海量纸质或电子文档，PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域，它扮演着连接图像与大型语言模型（LLM）的桥梁角色，能将视觉信息直接转化为文本输入，助力智能问答、文档分析等应用场景落地。\n\nPaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显：不仅支持全球 100 多种语言的识别，还能在 Windows、Linux、macOS 等多个系统上运行，并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目，PaddleOCR 既能满足快速集成的需求，也能支撑前沿的视觉语言研究，是处理文字识别任务的理想选择。",74913,"2026-04-05T10:44:17",[38,14,13,37],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":23,"last_commit_at":62,"category_tags":63,"status":16},2471,"tesseract","tesseract-ocr\u002Ftesseract","Tesseract 是一款历史悠久且备受推崇的开源光学字符识别（OCR）引擎，最初由惠普实验室开发，后由 Google 维护，目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据，有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题，是数字化归档和信息自动化的重要基础工具。\n\n在技术层面，Tesseract 展现了强大的适应能力。从版本 4 开始，它引入了基于长短期记忆网络（LSTM）的神经网络 OCR 引擎，显著提升了行识别的准确率；同时，为了兼顾旧有需求，它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码，开箱即用即可识别超过 100 种语言，并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面，它灵活支持纯文本、hOCR、PDF、TSV 等多种格式，方便后续数据处理。\n\nTesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库（libtesseract），不包含图形用户界面（GUI），因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中",73286,"2026-04-03T01:56:45",[13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":79,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":95,"forks":96,"last_commit_at":97,"license":98,"difficulty_score":10,"env_os":99,"env_gpu":100,"env_ram":101,"env_deps":102,"category_tags":111,"github_topics":112,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":116,"updated_at":117,"faqs":118,"releases":152},2790,"facebookresearch\u002Fvideoseal","videoseal","Open and efficient video and image watermarking","VideoSeal 是一款开源且高效的图像与视频隐形水印工具，旨在为多媒体内容提供不可见的版权保护。它解决了传统水印容易破坏画质或在压缩、剪辑后失效的痛点，能够在人眼几乎无法察觉的情况下，将加密信息牢固地嵌入到图片或视频帧中，并确保视频水印在时间序列上的连贯性。\n\n这套工具非常适合开发者、人工智能研究人员以及需要保护数字资产的内容创作者使用。无论是希望集成水印功能的工程师，还是研究多媒体安全的研究者，都能通过其简洁的 Python 接口快速上手。\n\nVideoSeal 的核心亮点在于其强大的模型家族：PixelSeal 通过独特的对抗训练技术，实现了鲁棒性与隐蔽性的最佳平衡；ChunkySeal 则将水印容量大幅提升至 1024 比特，突破了以往的技术限制；而主模型 VideoSeal 专为视频优化，能有效抵抗各类常见攻击。所有模型、训练代码及评估工具均基于 MIT 协议完全开放，让用户可以自由部署、微调甚至离线使用，是构建可信数字内容生态的理想选择。","\u003Cdiv align=\"center\">\n\n# 🎥 🦭 VideoSeal: SOTA Invisible Watermarking Models for Images & Videos\n\n[![Demo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🌐_Demo-Try_Now-blue)](https:\u002F\u002Faidemos.meta.com\u002Fvideoseal)\n[![Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fvideoseal\u002Fblob\u002Fmain\u002Fnotebooks\u002Fcolab.ipynb)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](LICENSE)\n\n\u003Ctable align=\"center\">\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492\">VideoSeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"#pixelseal-adversarial-only-training-for-invisible-watermarking\">PixelSeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812\">ChunkySeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468\">WmForger\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2412.09492-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2512.16874-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.12812-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.20468-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n---\n\n## 🔥 Highlights\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_videoseal_readme_52e606cf0550.png\" width=\"100%\" alt=\"PixelSeal Performance\"\u002F>\n  \u003Cbr>\n  \u003Cem>\u003Cb>PixelSeal\u003C\u002Fb> achieves state-of-the-art robustness-imperceptibility trade-off, positioning at the Pareto frontier\u003C\u002Fem>\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n- 🏆 **PixelSeal**: SOTA imperceptibility & robustness through adversarial-only training and JND-based attenuation\n- 🚀 **ChunkySeal**: 4× capacity increase (1024 bits) - proving watermarking limits are far from reached\n- 🎬 **VideoSeal**: Efficient image & video watermarking with temporal consistency\n- 🔓 **Open Source**: All models, training code, and evaluation tools released under MIT license\n\n---\n\n## 📰 Latest Updates\n\n- **December 2025**: 🆕 **ChunkySeal** and **PixelSeal** released! Model cards and checkpoints now available\n- **October 2025**: 🏅 [**WmForger**](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468) accepted to **NeurIPS 2025 as Spotlight**! Code in [`wmforger\u002F`](wmforger\u002F)\n- **March 2025**: VideoSeal v1.0 with improved 256-bit model and enhanced robustness\n- **December 2024**: Initial VideoSeal release with 96-bit baseline model\n\n\n## 🚀 Quick start\n\n```python\nimport videoseal\nfrom PIL import Image\nimport torchvision.transforms as T\n\n# Load any model by name (automatically downloads on first use)\nmodel = videoseal.load(\"videoseal\")     # VideoSeal v1.0 (256-bit, stable)\n# model = videoseal.load(\"pixelseal\")   # PixelSeal (SOTA imperceptibility & robustness)\n# model = videoseal.load(\"chunkyseal\")  # ChunkySeal (1024-bit high capacity)\n\n# Watermark an image 🎨\nimg_tensor = T.ToTensor()(Image.open(\"image.jpg\")).unsqueeze(0)\noutputs = model.embed(img_tensor)\nT.ToPILImage()(outputs[\"imgs_w\"][0]).save(\"watermarked.jpg\")\n\n# Detect watermarks\ndetected = model.detect(img_tensor)\nhidden_message = (detected[\"preds\"][0, 1:] > 0).float()  # Binary message\n```\n\n**Video watermarking:**\n\n```python\nimport videoseal\nimport torchvision\n\n# Load and watermark video 🎬\nmodel = videoseal.load(\"videoseal\")\nvideo, _, _ = torchvision.io.read_video(\"video.mp4\")\nvideo = video.permute(0, 3, 1, 2).float() \u002F 255.0\n\noutputs = model.embed(video, is_video=True)\nwatermarked = (outputs[\"imgs_w\"] * 255).byte().permute(0, 2, 3, 1)\ntorchvision.io.write_video(\"watermarked.mp4\", watermarked, fps=30)\n```\n\n> 💡 **For standalone usage without dependencies**, see our [TorchScript guide](docs\u002Ftorchscript.md) for pre-compiled models.\n\n## Installation\n\n\n### Requirements\n\nVersion of Python is 3.10 (pytorch > 2.3, torchvision 0.16.0, torchaudio 2.1.0, cuda 12.1).\nInstall pytorch:\n```\nconda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia\n```\n\nOther dependencies:\n```\npip install -r requirements.txt\n```\n\nFor training, we also recommend using decord:\n```\npip install decord\n```\nNote that there may be some issues with installing decord: https:\u002F\u002Fgithub.com\u002Fdmlc\u002Fdecord\u002Fissues\u002F213\nEverything should be working without decord for inference, but there may be issues for training in this case.\n\n## Model Zoo\n\nWe provide a comprehensive suite of watermarking models with different trade-offs between capacity, robustness, and imperceptibility.\n\n| Model | Capacity | Best For | Model Card | Checkpoint | Paper | Status |\n|:------|:--------:|:---------|:----------:|:----------:|:-----:|:------:|\n| **PixelSeal** | 256 bits | **SOTA Robustness & Imperceptibility** | [`pixelseal.yaml`](videoseal\u002Fcards\u002Fpixelseal.yaml) | [pixelseal\u002Fcheckpoint.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fpixelseal\u002Fcheckpoint.pth) | [arXiv:2512.16874](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874) | 🆕 New |\n| **ChunkySeal** | **1024 bits** | **High Capacity larger model** | [`chunkyseal.yaml`](videoseal\u002Fcards\u002Fchunkyseal.yaml) | [chunkyseal\u002Fcheckpoint.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fchunkyseal\u002Fcheckpoint.pth) | [arXiv:2510.12812](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812) | 🆕 New |\n| **VideoSeal v1.0** | 256 bits | **Stable** | [`videoseal_1.0.yaml`](videoseal\u002Fcards\u002Fvideoseal_1.0.yaml) | [y_256b_img.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fy_256b_img.pth) | [arXiv:2412.09492](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492) | ✅ Stable |\n| VideoSeal v0.0 | 96 bits | Legacy Baseline | [`videoseal_0.0.yaml`](videoseal\u002Fcards\u002Fvideoseal_0.0.yaml) | [rgb_96b.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Frgb_96b.pth) | [arXiv:2412.09492](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492) | 🟡 Legacy |\n\n**Note**: For complete training checkpoints (with optimizer states and discriminators), see [docs\u002Ftraining.md](docs\u002Ftraining.md).\n\n\n### Download the other models used as baselines\n\nWe do not own any third-party models, so you have to download them manually.\nWe provide a guide on how to download the models at [docs\u002Fbaselines.md](docs\u002Fbaselines.md).\n\n### VMAF\n\nWe provide a guide on how to check and install VMAF at [docs\u002Fvmaf.md](docs\u002Fvmaf.md).\n\n\n\n\n\n\n## Inference\n\n### Notebooks\n\n- [`notebooks\u002Fimage_inference.ipynb`](notebooks\u002Fimage_inference.ipynb)\n- [`notebooks\u002Fvideo_inference.ipynb`](notebooks\u002Fvideo_inference.ipynb)\n- [`notebooks\u002Fvideo_inference_streaming.ipynb`](notebooks\u002Fvideo_inference_streaming.ipynb): optimized for lower RAM usage\n\n### Audio-visual watermarking\n\n[`inference_av.py`](inference_av.py) \n\nTo watermark both audio and video from a video file.\nIt loads the full video in memory, so it is not suitable for long videos.\n\nExample:\n```bash\npython inference_av.py --input assets\u002Fvideos\u002F1.mp4 --output_dir outputs\u002F\npython inference_av.py --detect --input outputs\u002F1.mp4\n```\n\n### Streaming embedding and extraction\n\n[`inference_streaming.py`](inference_streaming.py) \n\nTo watermark a video file in streaming.\nIt loads the video clips by clips, so it is suitable for long videos, even on laptops.\n\nExample:\n```bash\npython inference_streaming.py --input assets\u002Fvideos\u002F1.mp4 --output_dir outputs\u002F\n```\nWill output the watermarked video in `outputs\u002F1.mp4` and the binary message in `outputs\u002F1.txt`.\n\n\n### Full evaluation\n\n[`videoseal\u002Fevals\u002Ffull.py`](videoseal\u002Fevals\u002Ffull.py)\n\nTo run full evaluation of models and baselines.\n\nExample to evaluate a trained model:\n```bash\npython -m videoseal.evals.full \\\n    --checkpoint \u002Fpath\u002Fto\u002Fvideoseal\u002Fcheckpoint.pth \\\n```\nor, to run a given baseline:\n```bash\npython -m videoseal.evals.full \\\n    --checkpoint baseline\u002Fwam \\\n``` \n\nThis should save a file called `metrics.csv` with image\u002Fvideo imperceptibility metrics and the robustness to each augmentation (you can remove some of them to make the evaluation faster).\nFor instance, running the eval script for the default `videoseal` model on high-resolution videos from the SA-V dataset should give metrics similar to [sav_256b_metrics](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fsav_256b_metrics.csv).\n\n\n## More details\n\n### Training\n\nWe provide training code to reproduce our models or train your own models. This includes image and video training (we recommand training on image first, even if you wish to do video).\nSee [docs\u002Ftraining.md](docs\u002Ftraining.md) for detailed instructions on data preparation, training commands, and pre-trained model checkpoints.\n\n### Inference\n\nHere are some important parameters for the models:\n* **`scaling_w`**: Controls the global watermark strength (default `0.2`). Higher values increase robustness against attacks but make the watermark more visible; lower values improve imperceptibility.\n* **`attenuation`**: Enables Just Noticeable Difference (JND) masking. The JND model builds a heatmap that is high when there is a lot of texture, and low otherwise. It allows the model to hide stronger watermarks in these textured areas while preserving smooth regions. By default the `videoseal_1.0` model uses a JND heatmap (the one present in [modules\u002Fjnd.py](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fblob\u002Fmain\u002Fvideoseal\u002Fmodules\u002Fjnd.py)).\n\nYou can also modify some model attributes after loading.\n```python\n# Example: updating parameters on an already loaded model\nmodel.blender.scaling_w = 0.4   # Increase strength (more robust)\n```\n\n## License\n\nThe model is licensed under an [MIT license](LICENSE).\n\n## Contributing\n\nSee [contributing](.github\u002FCONTRIBUTING.md) and the [code of conduct](.github\u002FCODE_OF_CONDUCT.md).\n\n## See Also\n\n- [**AudioSeal**](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudioseal)\n- [**Watermark-Anything**](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fwatermark-anything\u002F)\n\n## Maintainers and contributors\n\nPierre Fernandez, Hady Elsahar, Tomas Soucek, Sylvestre Rebuffi, Alex Mourachko\n\n## 📜 Papers & Citations\n\nIf you find this repository useful, please consider giving a star ⭐ and cite the relevant papers:\n\n### VideoSeal: Open and Efficient Video Watermarking\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2412.09492-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492)\n\n*Pierre Fernandez, Hady Elsahar, I. Zeki Yalniz, Alexandre Mourachko*\n\n**Demo**: [aidemos.meta.com\u002Fvideoseal](https:\u002F\u002Faidemos.meta.com\u002Fvideoseal)\n\n```bibtex\n@article{fernandez2024videoseal,\n  title={Video Seal: Open and Efficient Video Watermarking},\n  author={Fernandez, Pierre and Elsahar, Hady and Yalniz, I. Zeki and Mourachko, Alexandre},\n  journal={arXiv preprint arXiv:2412.09492},\n  year={2024}\n}\n```\n\n### ChunkySeal: We Can Hide More Bits\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.12812-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812)\n\n*Aleksandar Petrov, Pierre Fernandez, Tomáš Souček, Hady Elsahar*\n\nDespite rapid progress in deep learning-based image watermarking, the capacity of current robust methods remains limited to the scale of only a few hundred bits. This work establishes theoretical upper bounds on watermarking capacity and demonstrates **ChunkySeal**, which increases capacity 4× to **1024 bits** while preserving image quality and robustness.\n\n```bibtex\n@misc{petrov2025hidebits,\n  title={We Can Hide More Bits: The Unused Watermarking Capacity in Theory and in Practice}, \n  author={Aleksandar Petrov and Pierre Fernandez and Tom\\'{a}\\v{s} Sou\\v{c}ek and Hady Elsahar},\n  year={2025},\n  eprint={2510.12812},\n  archivePrefix={arXiv},\n  primaryClass={cs.CR},\n  url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812}\n}\n```\n\n### PixelSeal: Adversarial-Only Training for Invisible Watermarking\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2512.16874-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874)\n\n*Tomáš Souček\\*, Pierre Fernandez\\*, Hady Elsahar, Sylvestre-Alvise Rebuffi, Valeriu Lacatusu, Tuan Tran, Tom Sander, Alexandre Mourachko*\n\nThis work introduces **adversarial-only training** that eliminates unreliable perceptual losses, achieving state-of-the-art robustness and imperceptibility. PixelSeal addresses optimization instability and resolution scaling challenges through a three-stage training schedule and JND-based attenuation.\n\n```bibtex\n@article{soucek2025pixelseal,\n  title={Pixel Seal: Adversarial-only Training for Invisible Image and Video Watermarking},\n  author={Sou\\v{c}ek, Tom\\'{a}\\v{s} and Fernandez, Pierre and Elsahar, Hady and Rebuffi, Sylvestre-Alvise and Lacatusu, Valeriu and Tran, Tuan and Sander, Tom and Mourachko, Alexandre},\n  journal={arXiv preprint arXiv:2512.16874},\n  year={2025}\n}\n```\n\n### WmForger: Black-Box Watermark Forging Attack\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.20468-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468)\n\n*Tomáš Souček, Sylvestre-Alvise Rebuffi, Pierre Fernandez, Nikola Jovanović, Hady Elsahar, Valeriu Lacatusu, Tuan Tran, Alexandre Mourachko*\n\n**NeurIPS 2025 Spotlight** 🏅 | [Virtual Site](https:\u002F\u002Fneurips.cc\u002Fvirtual\u002F2025\u002Floc\u002Fsan-diego\u002Fposter\u002F115131)\n\n```bibtex\n@inproceedings{soucek2025wmforger,\n  title={Transferable Black-Box One-Shot Forging of Watermarks via Image Preference Models},\n  author={Sou\\v{c}ek, Tom\\'{a}\\v{s} and Rebuffi, Sylvestre-Alvise and Fernandez, Pierre and Jovanović, Nikola and Elsahar, Hady and Lacatusu, Valeriu and Tran, Tuan and Mourachko, Alexandre},\n  booktitle={Advances in Neural Information Processing Systems},\n  year={2025}\n}\n```\n","\u003Cdiv align=\"center\">\n\n# 🎥 🦭 VideoSeal：面向图像与视频的SOTA隐形水印模型\n\n[![Demo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🌐_Demo-Try_Now-blue)](https:\u002F\u002Faidemos.meta.com\u002Fvideoseal)\n[![Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Ffacebookresearch\u002Fvideoseal\u002Fblob\u002Fmain\u002Fnotebooks\u002Fcolab.ipynb)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](LICENSE)\n\n\u003Ctable align=\"center\">\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492\">VideoSeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"#pixelseal-adversarial-only-training-for-invisible-watermarking\">PixelSeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812\">ChunkySeal\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cb>\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468\">WmForger\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2412.09492-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2512.16874-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.12812-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.20468-b31b1b.svg\" alt=\"arXiv\">\u003C\u002Fa>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n---\n\n## 🔥 亮点\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_videoseal_readme_52e606cf0550.png\" width=\"100%\" alt=\"PixelSeal性能\"\u002F>\n  \u003Cbr>\n  \u003Cem>\u003Cb>PixelSeal\u003C\u002Fb>实现了最先进的鲁棒性与不可感知性平衡，位于帕累托前沿\u003C\u002Fem>\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n- 🏆 **PixelSeal**：通过仅对抗训练和基于JND的衰减，达到SOTA的不可感知性和鲁棒性\n- 🚀 **ChunkySeal**：容量提升4倍（1024位）——证明水印技术的极限远未触及\n- 🎬 **VideoSeal**：具有时间一致性的高效图像与视频水印方案\n- 🔓 **开源**：所有模型、训练代码及评估工具均以MIT许可证发布\n\n---\n\n## 📰 最新动态\n\n- **2025年12月**：🆕 **ChunkySeal**和**PixelSeal**发布！模型卡片和检查点现已可用\n- **2025年10月**：🏅 [**WmForger**](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468)被接受为**NeurIPS 2025 Spotlight**！代码位于[`wmforger\u002F`](wmforger\u002F)\n- **2025年3月**：VideoSeal v1.0，改进了256位模型并增强了鲁棒性\n- **2024年12月**：首次发布VideoSeal，配备96位基准模型\n\n\n## 🚀 快速入门\n\n```python\nimport videoseal\nfrom PIL import Image\nimport torchvision.transforms as T\n\n# 按名称加载任意模型（首次使用时自动下载）\nmodel = videoseal.load(\"videoseal\")     # VideoSeal v1.0 (256位，稳定)\n# model = videoseal.load(\"pixelseal\")   # PixelSeal（SOTA不可感知性与鲁棒性）\n# model = videoseal.load(\"chunkyseal\")  # ChunkySeal（1024位高容量）\n\n# 为图像添加水印 🎨\nimg_tensor = T.ToTensor()(Image.open(\"image.jpg\")).unsqueeze(0)\noutputs = model.embed(img_tensor)\nT.ToPILImage()(outputs[\"imgs_w\"][0]).save(\"watermarked.jpg\")\n\n# 检测水印\ndetected = model.detect(img_tensor)\nhidden_message = (detected[\"preds\"][0, 1:] > 0).float()  # 二进制消息\n```\n\n**视频水印：**\n\n```python\nimport videoseal\nimport torchvision\n\n# 加载并为视频添加水印 🎬\nmodel = videoseal.load(\"videoseal\")\nvideo, _, _ = torchvision.io.read_video(\"video.mp4\")\nvideo = video.permute(0, 3, 1, 2).float() \u002F 255.0\n\noutputs = model.embed(video, is_video=True)\nwatermarked = (outputs[\"imgs_w\"] * 255).byte().permute(0, 2, 3, 1)\ntorchvision.io.write_video(\"watermarked.mp4\", watermarked, fps=30)\n```\n\n> 💡 **若需无依赖的独立使用**，请参阅我们的[TorchScript指南](docs\u002Ftorchscript.md)，获取预编译模型。\n\n## 安装\n\n\n### 要求\n\nPython版本需为3.10（PyTorch > 2.3，Torchvision 0.16.0，Torchaudio 2.1.0，CUDA 12.1）。安装PyTorch：\n```\nconda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia\n```\n\n其他依赖：\n```\npip install -r requirements.txt\n```\n\n进行训练时，我们还建议使用Decord：\n```\npip install decord\n```\n请注意，安装Decord可能会遇到一些问题：https:\u002F\u002Fgithub.com\u002Fdmlc\u002Fdecord\u002Fissues\u002F213\n推理时无需Decord即可正常工作，但在训练时可能会出现问题。\n\n## 模型库\n\n我们提供了一系列全面的水印模型，在容量、鲁棒性和不可感知性之间提供了不同的权衡。\n\n| 模型 | 容量 | 适用场景 | 模型卡片 | 检查点 | 论文 | 状态 |\n|:------|:--------:|:---------|:----------:|:----------:|:-----:|:------:|\n| **PixelSeal** | 256位 | **SOTA鲁棒性与不可感知性** | [`pixelseal.yaml`](videoseal\u002Fcards\u002Fpixelseal.yaml) | [pixelseal\u002Fcheckpoint.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fpixelseal\u002Fcheckpoint.pth) | [arXiv:2512.16874](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874) | 🆕 新 |\n| **ChunkySeal** | **1024位** | **高容量大型模型** | [`chunkyseal.yaml`](videoseal\u002Fcards\u002Fchunkyseal.yaml) | [chunkyseal\u002Fcheckpoint.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fchunkyseal\u002Fcheckpoint.pth) | [arXiv:2510.12812](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812) | 🆕 新 |\n| **VideoSeal v1.0** | 256位 | **稳定** | [`videoseal_1.0.yaml`](videoseal\u002Fcards\u002Fvideoseal_1.0.yaml) | [y_256b_img.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fy_256b_img.pth) | [arXiv:2412.09492](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492) | ✅ 稳定 |\n| VideoSeal v0.0 | 96位 | 旧版基准 | [`videoseal_0.0.yaml`](videoseal\u002Fcards\u002Fvideoseal_0.0.yaml) | [rgb_96b.pth](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Frgb_96b.pth) | [arXiv:2412.09492](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492) | 🟡 遗留 |\n\n**注**：完整的训练检查点（包含优化器状态和判别器）请参见[docs\u002Ftraining.md](docs\u002Ftraining.md)。\n\n\n### 下载作为基线的其他模型\n\n我们不拥有任何第三方模型，因此您需要手动下载它们。\n我们在[docs\u002Fbaselines.md](docs\u002Fbaselines.md)中提供了下载这些模型的指南。\n\n### VMAF\n\n我们在[docs\u002Fvmaf.md](docs\u002Fvmaf.md)中提供了检查和安装VMAF的指南。\n\n\n\n\n## 推理\n\n### 笔记本\n\n- [`notebooks\u002Fimage_inference.ipynb`](notebooks\u002Fimage_inference.ipynb)\n- [`notebooks\u002Fvideo_inference.ipynb`](notebooks\u002Fvideo_inference.ipynb)\n- [`notebooks\u002Fvideo_inference_streaming.ipynb`](notebooks\u002Fvideo_inference_streaming.ipynb)：针对较低内存占用进行了优化\n\n### 音视频水印\n\n[`inference_av.py`](inference_av.py) \n\n用于从视频文件中同时为音频和视频添加水印。\n它会将整个视频加载到内存中，因此不适合处理长视频。\n\n示例：\n```bash\npython inference_av.py --input assets\u002Fvideos\u002F1.mp4 --output_dir outputs\u002F\npython inference_av.py --detect --input outputs\u002F1.mp4\n```\n\n### 流式嵌入与提取\n\n[`inference_streaming.py`](inference_streaming.py)\n\n用于以流式方式为视频文件添加水印。它按片段加载视频，因此非常适合处理长视频，甚至在笔记本电脑上也能顺利运行。\n\n示例：\n```bash\npython inference_streaming.py --input assets\u002Fvideos\u002F1.mp4 --output_dir outputs\u002F\n```\n这将在 `outputs\u002F1.mp4` 中输出带水印的视频，并将二进制消息保存到 `outputs\u002F1.txt` 中。\n\n\n### 完整评估\n\n[`videoseal\u002Fevals\u002Ffull.py`](videoseal\u002Fevals\u002Ffull.py)\n\n用于对模型和基线进行完整评估。\n\n评估训练好的模型的示例：\n```bash\npython -m videoseal.evals.full \\\n    --checkpoint \u002Fpath\u002Fto\u002Fvideoseal\u002Fcheckpoint.pth \\\n```\n或者，运行给定的基线：\n```bash\npython -m videoseal.evals.full \\\n    --checkpoint baseline\u002Fwam \\\n``` \n\n这将生成一个名为 `metrics.csv` 的文件，其中包含图像\u002F视频不可感知性指标以及对每种增强技术的鲁棒性测试结果（你可以移除部分增强技术以加快评估速度）。例如，在 SA-V 数据集的高分辨率视频上运行默认 `videoseal` 模型的评估脚本，应得到类似于 [sav_256b_metrics](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fvideoseal\u002Fsav_256b_metrics.csv) 的指标。\n\n\n## 更多详情\n\n### 训练\n\n我们提供了训练代码，可用于复现我们的模型或训练你自己的模型。其中包括图像和视频的训练（即使你打算进行视频训练，我们也建议先从图像开始）。有关数据准备、训练命令以及预训练模型检查点的详细说明，请参阅 [docs\u002Ftraining.md](docs\u002Ftraining.md)。\n\n### 推理\n\n以下是模型的一些重要参数：\n* **`scaling_w`**：控制全局水印强度（默认值为 `0.2`）。较高的值可提高对抗攻击的鲁棒性，但会使水印更加明显；较低的值则能提升不可感知性。\n* **`attenuation`**：启用刚刚可觉察差异（JND）掩蔽功能。JND 模型会构建一张热图，纹理丰富的区域数值较高，而其他区域较低。这样，模型可以在这些纹理丰富的区域隐藏更强的水印，同时保持平滑区域的自然外观。默认情况下，`videoseal_1.0` 模型会使用 JND 热图（位于 [modules\u002Fjnd.py](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fblob\u002Fmain\u002Fvideoseal\u002Fmodules\u002Fjnd.py) 中）。\n\n你也可以在加载模型后修改其某些属性。\n```python\n# 示例：更新已加载模型的参数\nmodel.blender.scaling_w = 0.4   # 增强强度（更鲁棒）\n```\n\n## 许可证\n\n该模型采用 [MIT 许可证](LICENSE)授权。\n\n## 贡献\n\n请参阅 [贡献指南](.github\u002FCONTRIBUTING.md) 和 [行为准则](.github\u002FCODE_OF_CONDUCT.md)。\n\n## 参见\n\n- [**AudioSeal**](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudioseal)\n- [**Watermark-Anything**](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fwatermark-anything\u002F)\n\n## 维护者与贡献者\n\nPierre Fernandez, Hady Elsahar, Tomas Soucek, Sylvestre Rebuffi, Alex Mourachko\n\n## 📜 论文与引用\n\n如果你觉得这个仓库对你有帮助，请考虑给它一颗星 ⭐，并引用相关论文：\n\n### VideoSeal：开放且高效的视频水印技术\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2412.09492-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.09492)\n\n*Pierre Fernandez, Hady Elsahar, I. Zeki Yalniz, Alexandre Mourachko*\n\n**演示**: [aidemos.meta.com\u002Fvideoseal](https:\u002F\u002Faidemos.meta.com\u002Fvideoseal)\n\n```bibtex\n@article{fernandez2024videoseal,\n  title={Video Seal: Open and Efficient Video Watermarking},\n  author={Fernandez, Pierre and Elsahar, Hady and Yalniz, I. Zeki and Mourachko, Alexandre},\n  journal={arXiv preprint arXiv:2412.09492},\n  year={2024}\n}\n```\n\n### ChunkySeal：我们可以隐藏更多比特\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.12812-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812)\n\n*Aleksandar Petrov, Pierre Fernandez, Tomáš Souček, Hady Elsahar*\n\n尽管基于深度学习的图像水印技术取得了快速进展，但当前鲁棒方法的容量仍然局限于几百比特的规模。这项工作建立了水印容量的理论上限，并展示了 **ChunkySeal**，它将容量提升至 **1024 比特**，同时保持图像质量和鲁棒性不变。\n\n```bibtex\n@misc{petrov2025hidebits,\n  title={We Can Hide More Bits: The Unused Watermarking Capacity in Theory and in Practice}, \n  author={Aleksandar Petrov and Pierre Fernandez and Tom\\'{a}\\v{s} Sou\\v{c}ek and Hady Elsahar},\n  year={2025},\n  eprint={2510.12812},\n  archivePrefix={arXiv},\n  primaryClass={cs.CR},\n  url={https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.12812}\n}\n```\n\n### PixelSeal：仅对抗训练实现隐形水印\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2512.16874-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16874)\n\n*Tomáš Souček\\*, Pierre Fernandez\\*, Hady Elsahar, Sylvestre-Alvise Rebuffi, Valeriu Lacatusu, Tuan Tran, Tom Sander, Alexandre Mourachko*\n\n这项工作引入了 **仅对抗训练** 方法，消除了不可靠的感知损失，从而实现了最先进的鲁棒性和不可感知性。PixelSeal 通过三阶段训练计划和基于 JND 的衰减机制，解决了优化不稳定和分辨率缩放等挑战。\n\n```bibtex\n@article{soucek2025pixelseal,\n  title={Pixel Seal: Adversarial-only Training for Invisible Image and Video Watermarking},\n  author={Sou\\v{c}ek, Tom\\'{a}\\v{s} and Fernandez, Pierre and Elsahar, Hady and Rebuffi, Sylvestre-Alvise and Lacatusu, Valeriu and Tran, Tuan and Sander, Tom and Mourachko, Alexandre},\n  journal={arXiv preprint arXiv:2512.16874},\n  year={2025}\n}\n```\n\n### WmForger：黑盒水印伪造攻击\n\n[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2510.20468-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.20468)\n\n*Tomáš Souček, Sylvestre-Alvise Rebuffi, Pierre Fernandez, Nikola Jovanović, Hady Elsahar, Valeriu Lacatusu, Tuan Tran, Alexandre Mourachko*\n\n**NeurIPS 2025 Spotlight** 🏅 | [虚拟站点](https:\u002F\u002Fneurips.cc\u002Fvirtual\u002F2025\u002Floc\u002Fsan-diego\u002Fposter\u002F115131)\n\n```bibtex\n@inproceedings{soucek2025wmforger,\n  title={Transferable Black-Box One-Shot Forging of Watermarks via Image Preference Models},\n  author={Sou\\v{c}ek, Tom\\'{a}\\v{s} and Rebuffi, Sylvestre-Alvise and Fernandez, Pierre and Jovanović, Nikola and Elsahar, Hady and Lacatusu, Valeriu and Tran, Tuan and Mourachko, Alexandre},\n  booktitle={Advances in Neural Information Processing Systems},\n  year={2025}\n}\n```","# VideoSeal 快速上手指南\n\nVideoSeal 是一个开源的图像与视频隐形水印工具包，包含 **PixelSeal**（SOTA 鲁棒性与不可感知性）、**ChunkySeal**（高容量 1024 bits）和 **VideoSeal**（高效视频水印）等模型。\n\n## 环境准备\n\n### 系统要求\n- **Python**: 3.10\n- **CUDA**: 12.1 (推荐)\n- **PyTorch**: > 2.3\n- **操作系统**: Linux \u002F macOS \u002F Windows (需配置 CUDA 环境)\n\n### 前置依赖\n确保已安装 Conda 或具备相应的 Python 环境管理工具。\n\n## 安装步骤\n\n### 1. 安装 PyTorch 及相关组件\n推荐使用官方源安装指定版本（适配 CUDA 12.1）：\n\n```bash\nconda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia\n```\n\n> 💡 **国内加速建议**：如果下载速度慢，可使用清华或中科大镜像源替换 `-c` 参数后的源地址，或在 conda config 中预先设置镜像。\n> 例如使用清华源：\n> ```bash\n> conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Fcloud\u002Fpytorch -c https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Fcloud\u002Fnvidia\n> ```\n\n### 2. 安装项目依赖\n克隆仓库并安装 Python 依赖：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal.git\ncd videoseal\npip install -r requirements.txt\n```\n\n### 3. (可选) 安装训练依赖\n仅用于训练时推荐安装 `decord`（推理可不装）：\n\n```bash\npip install decord\n```\n*注意：`decord` 在某些环境下可能存在安装问题，若仅进行推理可跳过此步。*\n\n## 基本使用\n\nVideoSeal 支持自动下载模型权重。以下示例展示如何加载模型、对图像加水印及检测水印。\n\n### 图像水印嵌入与检测\n\n```python\nimport videoseal\nfrom PIL import Image\nimport torchvision.transforms as T\n\n# 加载模型 (首次运行会自动下载)\n# 可选模型：\"videoseal\" (稳定版), \"pixelseal\" (SOTA), \"chunkyseal\" (高容量)\nmodel = videoseal.load(\"videoseal\")     \n\n# 1. 嵌入水印\nimg_tensor = T.ToTensor()(Image.open(\"image.jpg\")).unsqueeze(0)\noutputs = model.embed(img_tensor)\n# 保存加水印后的图片\nT.ToPILImage()(outputs[\"imgs_w\"][0]).save(\"watermarked.jpg\")\n\n# 2. 检测水印\ndetected = model.detect(img_tensor)\n# 提取二进制隐藏信息\nhidden_message = (detected[\"preds\"][0, 1:] > 0).float()\nprint(\"Detected message:\", hidden_message)\n```\n\n### 视频水印嵌入\n\n```python\nimport videoseal\nimport torchvision\n\n# 加载模型\nmodel = videoseal.load(\"videoseal\")\n\n# 读取视频\nvideo, _, _ = torchvision.io.read_video(\"video.mp4\")\n# 预处理：调整维度并归一化\nvideo = video.permute(0, 3, 1, 2).float() \u002F 255.0\n\n# 嵌入水印 (注意设置 is_video=True)\noutputs = model.embed(video, is_video=True)\n\n# 后处理并保存\nwatermarked = (outputs[\"imgs_w\"] * 255).byte().permute(0, 2, 3, 1)\ntorchvision.io.write_video(\"watermarked.mp4\", watermarked, fps=30)\n```\n\n### 高级用法提示\n- **调整水印强度**：加载模型后可修改 `scaling_w` 参数。值越大鲁棒性越强但越可见，默认值为 `0.2`。\n  ```python\n  model.blender.scaling_w = 0.4  # 增强鲁棒性\n  ```\n- **流式处理长视频**：对于超长视频，建议使用 `inference_streaming.py` 脚本以避免内存溢出。\n  ```bash\n  python inference_streaming.py --input assets\u002Fvideos\u002F1.mp4 --output_dir outputs\u002F\n  ```","某短视频 MCN 机构每天需向全网分发数千条原创高清视频，迫切需要在不破坏画质的前提下嵌入版权标识以应对盗版。\n\n### 没有 videoseal 时\n- **画质受损严重**：传统可见水印遮挡关键画面影响观看体验，或不可见水印算法粗糙导致视频出现噪点和色彩断层。\n- **抗攻击能力弱**：盗版者只需对视频进行简单的压缩、裁剪或调整亮度，原有的版权信息就会被彻底抹除，无法追溯。\n- **帧间闪烁不稳定**：逐帧处理图片的方案导致水印在连续播放时产生肉眼可见的闪烁，暴露了加密痕迹且极易被移除。\n- **维权举证困难**：由于缺乏高容量且鲁棒的隐藏信息，发生侵权纠纷时难以提供确凿的技术证据链。\n\n### 使用 videoseal 后\n- **视觉完美隐形**：利用 PixelSeal 模型的对抗训练技术，将版权信息融入像素细节中，人眼完全无法察觉，保持了 4K 原片画质。\n- **极强鲁棒性**：即使盗版视频经过重度压缩、旋转或滤镜处理，videoseal 仍能精准提取出隐藏的 256 位甚至 1024 位版权密钥。\n- **时序高度一致**：专为视频设计的架构确保了水印在时间维度上的连贯性，彻底消除了帧间闪烁，让盗版者无从下手。\n- **自动化确权高效**：支持批量快速嵌入与检测，法务团队可一键从全网抓取的视频中还原版权信息，大幅降低维权成本。\n\nvideoseal 通过平衡极致的不可感知性与强大的抗攻击能力，为数字内容创作者构建了隐形的版权护城河。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffacebookresearch_videoseal_69043d7d.png","facebookresearch","Meta Research","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ffacebookresearch_449342bd.png","",null,"https:\u002F\u002Fopensource.fb.com","https:\u002F\u002Fgithub.com\u002Ffacebookresearch",[83,87,91],{"name":84,"color":85,"percentage":86},"Python","#3572A5",53.3,{"name":88,"color":89,"percentage":90},"Jupyter Notebook","#DA5B0B",46.7,{"name":92,"color":93,"percentage":94},"Shell","#89e051",0,620,76,"2026-04-02T06:58:34","MIT","未说明","需要 NVIDIA GPU，CUDA 12.1","未说明（流式处理脚本优化了低内存使用）",{"notes":103,"python":104,"dependencies":105},"官方推荐使用 conda 安装 PyTorch 及相关 CUDA 依赖。训练时强烈建议安装 decord 库，但其在某些环境下可能存在安装问题；仅进行推理时可无需 decord。支持通过 TorchScript 使用预编译模型以减少依赖。首次运行会自动下载模型权重。","3.10",[106,107,108,109,110],"torch==2.4.0","torchvision==0.19.0","torchaudio==2.4.0","pytorch-cuda=12.1","decord",[14,35],[113,114,115],"video","watermarking","image","2026-03-27T02:49:30.150509","2026-04-06T07:12:46.591311",[119,124,129,134,139,144,148],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},12896,"为什么我的模型训练后比特错误率（bits-error）高达 50%，而预训练模型只有约 2%？","这通常是因为有效批量大小（effective batch size）或学习率设置不当导致的。维护者建议：\n1. 如果您使用的 GPU 显存大于 16GB，尝试稍微增加批量大小；如果有更多 GPU，请增加 GPU 数量以匹配原论文的批量设置（原作者使用了 2x8 GPU）。\n2. 对学习率进行小范围的网格搜索并适当提高，例如尝试 1e-3 或 5e-4。\n3. 正常情况下，网络在训练 200 个 epoch 后，训练集上的比特准确率应达到 90%。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fissues\u002F33",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},12897,"对于长视频（超过 1 分钟），提取水印时需要截取不同长度的片段才能得到正确结果，且不同水印表现不一致，如何解决？","这是长视频水印提取的常见问题。解决方案是调整视频水印的步长（step_size）参数：\n1. 将 `step_size` 减小可以提高鲁棒性（准确率），但嵌入速度会变慢。例如设置为 2：`video_model.step_size = 2`。\n2. 如果设置为 16，则嵌入速度更快，但鲁棒性稍差。\n3. 如果仍然存在问题，可以尝试结合使用汉明码（Hamming code）或简单纠错码（simpleECC）来增强结果的准确性。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fissues\u002F66",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},12898,"如何将特定字符串转换为张量并嵌入视频，以及如何提高特定字符串的提取准确率？","为了提高特定字符串或随机字符串的提取准确率（从约 90% 提升），强烈建议使用纠错编码（ECC）：\n1. 使用汉明码（Hamming code）和重复码（repetition ECC）处理您的消息字符串。\n2. 维护者反馈显示，遵循此指导后性能表现非常出色（\"very brilliant\"）。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fissues\u002F38",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},12899,"运行推理脚本时，编码和提取的消息不一致，或者输出的视频似乎没有水印？","这是一个已知的代码 Bug。在旧版本的 `inference_av.py` 中，保存函数错误地传入了原始视频（`video`）和水印视频（`video_w`）的参数，导致实际保存的是未修改的原始视频。该问题已在后续代码修复中解决，请确保您使用的是最新版本的代码库。","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fissues\u002F17",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},12900,"README 中提到的“视频优化模型（v1.0）”何时发布？现在可以使用什么替代模型？","视频优化模型的独立发布计划已有变动。维护者建议直接使用新的 `pixelseal` 模型，它已经包含了相关优化。加载方法如下：\n```python\nmodel = videoseal.load(\"pixelseal\")\n```","https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fvideoseal\u002Fissues\u002F43",{"id":145,"question_zh":146,"answer_zh":147,"source_url":133},12901,"VideoSeal 项目的代码和模型是否允许商业使用？有什么许可证限制？","该项目的一切内容均基于 MIT 许可证授权。这意味着您可以自由地在开源项目或商业项目中使用其模型和代码，只需遵守 MIT 许可证的相关条款即可。许可证文件可在项目根目录的 LICENSE 文件中查看。",{"id":149,"question_zh":150,"answer_zh":151,"source_url":133},12902,"在处理长视频进行嵌入和提取时内存占用过大，且对不同视频格式（mp4, mkv, mov 等）缺乏统一参数，有什么建议？","针对长视频内存不足的问题，目前的可行方案是将视频分割成小批次（small batch）分别进行嵌入和提取操作。关于不同视频格式的统一参数，目前代码库中尚未提供针对所有格式（如 mp4, mkv, mov）的通用联合参数配置，建议在处理前统一转换格式或针对特定格式调整预处理流程。",[]]