{"slug": "icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry", "title": "Icop – open-source local AI NSFW filter for VLC (no cloud, no telemetry)", "summary": "Icop, an open-source AI content filtering plugin for VLC media player, has been released. It uses local ONNX Runtime inference to detect and block sensitive content in video frames without uploading data to the cloud. The plugin prioritizes privacy and runs on Windows, Linux, and macOS.", "body_md": "An open-source, privacy-first VLC plugin for local AI sensitive-content detection and frame blocking with ONNX Runtime.\n\nImportant\n\nicop is a best-effort content filter. Detection models can produce false positives and false negatives, so test your configuration before relying on it for child-safety or accessibility needs.\n\nicop is an open-source AI content filtering plugin for VLC media player. It uses local ONNX Runtime inference to classify buffered video frames before display, then shows the original frame or applies a black, blur, or warning treatment. Processing stays on your device; video frames are not uploaded to a service.\n\nThe plugin targets Windows and Linux today, with experimental macOS build and installation support. It is designed for privacy-conscious playback, offline video filtering, and developers exploring ONNX-based computer vision in VLC.\n\n[Watch the full ICOP VLC walkthrough](/asayed18/icop/blob/main/demo.mp4)\n\nPlugin setup, blocking styles, muted playback, and the detection debug overlay.\n\nThe public Git repository is source-only. Models, ONNX Runtime binaries, build trees, portable VLC copies, and release archives are downloaded or generated locally and are not committed.\n\n| Platform | Status | GPU inference |\n|---|---|---|\n| Windows x86_64 | Tested | CUDA (NVIDIA) / D3D12 (GPU fallback) |\n| Linux x86_64 | Tested | CUDA (NVIDIA) / MIGraphX (AMD) |\n| Linux ARM64 | Tested | CPU only |\n| macOS x86_64 | Tested | CPU / CoreML |\n| macOS ARM64 | Tested | CPU / CoreML |\n\nGPU runtimes are detected automatically at plugin load. Contributions that improve GPU support or validate the macOS path are welcome.\n\n- Buffers frames so playback does not intentionally outrun classification\n- Runs inference locally with ONNX Runtime\n- Supports multiple model profiles and automatic model-sized preprocessing\n- Provides black, blur, and warning block styles\n- Can mute audio while blocked output is shown\n- Supports precomputed decision maps for scan-ahead playback\n- Includes a D3D11 processing path for supported Windows hardware decoding\n- On Linux opaque VAAPI/VDPAU-style inputs, analyzes via VLC image conversion and drops blocked frames fail-closed when in-place masking is not available\n- Produces versioned, platform-specific packages with checksums and metadata\n- Includes unit, integration, and benchmark targets\n\n- Local and offline sensitive-content filtering in VLC media player\n- Best-effort parental controls and safer shared-screen playback\n- Privacy-first video moderation without cloud uploads\n- ONNX Runtime, CUDA, and D3D11 video-filter development\n- Cross-platform computer-vision research and prototyping\n\n- VLC decodes a video frame.\n- icop holds the frame before presentation.\n- The detector converts and resizes a sample for the selected model.\n- ONNX Runtime classifies the sample and applies the configured block window.\n- The plugin releases the original or masked frame to VLC.\n\nThe central safety invariant is simple: a frame that requires analysis should not be shown before its decision is available.\n\nAsk an AI assistant to install icop using the\n[INSTALL.md](/asayed18/icop/blob/main/INSTALL.md) guide. Give it the file and it will handle\ndownloading, copying, enabling the filter, and applying best-practice settings\nfor your platform.\n\nRequirements:\n\n- CMake 3.16 or newer\n- Ninja or another supported CMake generator\n- A C compiler and a C++17 compiler\n- VLC 3.0 development files for the target platform\n\nConfigure, build, and package:\n\n```\nmake build\nmake test\nmake release\n```\n\nOn Windows, use `mingw32-make`\n\ninstead of `make`\n\nwhen that is the installed GNU\nMake command. Direct CMake commands remain available in\n[CONTRIBUTING.md](/asayed18/icop/blob/main/CONTRIBUTING.md).\n\nThe package is written to `releases/v<version>/<os>/`\n\n. See\n[INSTALL.md](/asayed18/icop/blob/main/INSTALL.md) for end-user installation steps.\n\nWhen upgrading from VLC iClean, remove `libnsfw_filter_plugin`\n\nand\n`nsfw_filter_core`\n\nfiles before regenerating the plugin cache. The runtime\nfiles are named `libicop_plugin`\n\nand `icop_core`\n\n.\n\nBuild the host release, detect the installed VLC, copy the matching x86/x64/ARM64 payload, and regenerate VLC's plugin cache:\n\n```\nmake install_plugin\n```\n\nUse `mingw32-make install_plugin`\n\non Windows when GNU Make is installed under\nthat name. The target selects the PowerShell installer on Windows and the POSIX\ninstaller on Linux/macOS. Both validate release checksums, remove legacy VLC\niClean files, roll back failed copies, and regenerate the plugin cache. Windows\nrequests administrator access when needed; Linux and macOS use `sudo`\n\nonly for\nprotected plugin directories.\n\nPreview the operation or select a specific installation directly:\n\n```\npowershell -ExecutionPolicy Bypass -File .\\tools\\install_icop_plugin.ps1 -WhatIf\npowershell -ExecutionPolicy Bypass -File .\\tools\\install_icop_plugin.ps1 -VlcRoot \"C:\\Program Files\\VideoLAN\\VLC\"\nsh tools/install_icop_plugin.sh --dry-run\nsh tools/install_icop_plugin.sh --vlc-root /usr\n```\n\nClose VLC before installation. To stop it explicitly, pass\n`INSTALL_ARGS=-StopVlc`\n\non Windows or `INSTALL_ARGS=--stop-vlc`\n\non Linux/macOS.\n\nSee [CONTRIBUTING.md](/asayed18/icop/blob/main/CONTRIBUTING.md) for lightweight Windows, Linux, and WSL\nbuild and test commands. See [docs/releasing.md](/asayed18/icop/blob/main/docs/releasing.md) for package\nversioning, checksums, and release verification.\n\n| Profile | Input | Upstream project | Upstream license |\n|---|---|---|---|\n`marqo` |\n384x384 |\n|\n\n`adamcodd`\n\n[AdamCodd/vit-base-nsfw-detector](https://huggingface.co/AdamCodd/vit-base-nsfw-detector)`falconsai`\n\n[Falconsai/nsfw_image_detection](https://huggingface.co/Falconsai/nsfw_image_detection)`legacy`\n\n[iola1999/nsfw-detect-onnx](https://github.com/iola1999/nsfw-detect-onnx)Model and runtime files retain their upstream licenses. Review\n[THIRD_PARTY_NOTICES.md](/asayed18/icop/blob/main/THIRD_PARTY_NOTICES.md) before redistributing a binary\npackage.\n\nThe VLC module settings cover the most common choices:\n\n| Setting | Purpose |\n|---|---|\n| Model profile and path | Select a bundled profile or custom ONNX model |\n| ONNX provider | Choose CPU, CUDA, or automatic provider selection |\n| Processing backend | Choose portable CPU or supported Windows D3D11 processing |\n| Detection threshold | Control the model score that triggers blocking |\n| Analysis stride and buffer | Balance coverage, latency, and throughput |\n| Block style and padding | Choose the mask and extend detections around unsafe frames |\n| Audio muting | Mute playback while blocked frames are presented |\n| Decision map | Reuse precomputed blocked time ranges |\n\nSee [INSTALL.md Step 4](/asayed18/icop/blob/main/INSTALL.md#step-4--apply-best-practice-settings) for\nbest-practice values. The `marqo`\n\nprofile at threshold `0.17`\n\nprioritises\nsensitivity and can produce more false positives than the default. Adjust\nthreshold upward if false alarms are too frequent. No single profile is right\nfor every video — validate with representative, legally shareable media.\n\nBuild the plugin, detector core, tests, and benchmark:\n\n```\ncmake --build build-ninja --target icop_plugin icop_core icop_test icop_benchmark -j 8\nctest --test-dir build-ninja --output-on-failure\n```\n\nCI also supports a lightweight source build with model downloads disabled. The full integration suite requires locally downloaded ONNX models. Runtime testing requires a VLC installation or portable VLC tree compatible with the package.\n\n- Classification runs locally and does not require uploading video frames.\n- Optional debug dumps can write frame data to disk and should stay disabled for private media.\n- Logs may contain local paths and should be reviewed before sharing.\n- Detection quality depends on the model, threshold, source material, and processing configuration.\n- Public issues and tests must use synthetic or redistributable media, never private or explicit personal content.\n\nicop accepts sponsorship only through\n[GitHub Sponsors](https://github.com/sponsors/asayed18). Sponsorship does not\naffect issue priority, security handling, or project licensing.\n\nicop is licensed under\n[GPL-2.0-or-later](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html). See\n[LICENSE](/asayed18/icop/blob/main/LICENSE) for the full license text.\n\nVLC and VideoLAN are trademarks of VideoLAN. This independent project is not affiliated with or endorsed by VideoLAN.", "url": "https://wpnews.pro/news/icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry", "canonical_source": "https://github.com/asayed18/icop", "published_at": "2026-07-17 04:19:16+00:00", "updated_at": "2026-07-17 04:51:00.809026+00:00", "lang": "en", "topics": ["computer-vision", "ai-tools", "ai-ethics", "ai-products"], "entities": ["Icop", "VLC", "ONNX Runtime", "NVIDIA", "AMD", "Apple"], "alternates": {"html": "https://wpnews.pro/news/icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry", "markdown": "https://wpnews.pro/news/icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry.md", "text": "https://wpnews.pro/news/icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry.txt", "jsonld": "https://wpnews.pro/news/icop-open-source-local-ai-nsfw-filter-for-vlc-no-cloud-no-telemetry.jsonld"}}