{"id":20188006,"url":"https://github.com/arran4/vlc-xattr-plugin","last_synced_at":"2026-05-19T18:35:40.634Z","repository":{"id":244537417,"uuid":"815535448","full_name":"arran4/vlc-xattr-plugin","owner":"arran4","description":"A plugin for VLC to add \"seen\" to the `xdg.tags` list automatically when ever you watch anything","archived":false,"fork":false,"pushed_at":"2024-06-15T15:10:20.000Z","size":187,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T00:14:05.659Z","etag":null,"topics":["c","cmake","fs-attr","plugins","vlc","vlc-plugin","xattr"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arran4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-15T12:11:24.000Z","updated_at":"2025-01-04T16:07:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"342f2535-1a06-4417-a319-d0901270177e","html_url":"https://github.com/arran4/vlc-xattr-plugin","commit_stats":null,"previous_names":["arran4/vlc-xattr-plugin"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arran4%2Fvlc-xattr-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arran4%2Fvlc-xattr-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arran4%2Fvlc-xattr-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arran4%2Fvlc-xattr-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arran4","download_url":"https://codeload.github.com/arran4/vlc-xattr-plugin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241622613,"owners_count":19992504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cmake","fs-attr","plugins","vlc","vlc-plugin","xattr"],"created_at":"2024-11-14T03:26:57.623Z","updated_at":"2025-12-28T06:36:12.016Z","avatar_url":"https://github.com/arran4.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vlc xattr plugin\n\nThis is a plugin for VLC which adds the xattr tag 'seen' to the `user.xdg.tags` list anytime you watch a video.\n\n```bash\n% attr -g xdg.tags ~/Downloads/14⧸6⧸2024\\ \\[NU2402V166S00\\].mp4\nAttribute \"xdg.tags\" had a 4 byte value for /home/arran/Downloads/14⧸6⧸2024 [NU2402V166S00].mp4:\nseen\n```\n\n![img.png](doc/img.png)\n\nCurrently for any system that supports `setxattr` and `getxattr` which AFAIK is just Linux, but Mac might, and Windows might via WSL. (It should be possible to port it.)\n\n# Compatibility and platform support\n\n* **Tested VLC builds:** VLC 3.0.20 and 3.0.21 from distro packages on Linux.\n* **VLC APIs used:** interface module hooks (`set_capability(\"interface\", 1)`), playlist callbacks (`input-current`, `intf-event`), and metadata helpers (`input_item_GetTitleFbName`, `input_item_GetURI`). The plugin needs headers from `vlc-plugin-dev`/`vlc-devel` packages that ship these interfaces.\n* **Filesystem APIs:** requires POSIX extended attributes (`listxattr`, `getxattr`, `setxattr`) and the `user.xdg.tags` namespace. Files must live on a filesystem that enables user xattrs (e.g., ext4/xfs with the `user_xattr` mount option).\n* **Platform notes:**\n  * Linux: supported and verified with the above VLC versions.\n  * WSL: the plugin only works when the media resides on a filesystem that exposes `user.*` xattrs (the default NTFS mounts in WSL do not). Use WSL2 virtual ext4 disks or other xattr-capable mounts.\n  * macOS: not yet tested. macOS supports extended attributes but typically uses the `com.apple.*` namespace, so behavior may vary; use VLC 3.x headers and verify `user.xdg.tags` is writable.\n\n# How to build it? \n\nRequirements:\n* VLC headers\n* Standard C Development Libraries for Linux\n* CMake\n\n## Configure (out of tree)\n\nUse an out-of-tree build directory so generated files do not clutter the source tree:\n\n```\ncmake -S . -B build -DCMAKE_BUILD_TYPE=Release\n```\n\nYou can override the plugin install location during configuration with:\n\n```\ncmake -S . -B build -DVLC_PLUGIN_INSTALL_DIR=/your/custom/path\n```\n\n## Build\n\nCompile the plugin using the configured build directory:\n\n```\ncmake --build build\n```\n\n## Install\n\nInstall the compiled plugin to the chosen prefix (defaults to `/usr/local`):\n\n```\nsudo cmake --install build\n```\n\nFor packaging or staging installs, use `DESTDIR` to stage into a temporary root:\n\n```\nDESTDIR=/tmp/vlc-xattr-staging cmake --install build\nsudo DESTDIR=/tmp/pkg-root cmake --install build\n```\n\nThe install step places `libxattrplaying_plugin.so` into `${VLC_PLUGIN_INSTALL_DIR}` (which defaults to `${CMAKE_INSTALL_LIBDIR}/vlc/plugins/misc`).\n\n### Common package install paths\n\nDistribution packaging may set different `libdir` defaults. Typical plugin destinations are:\n\n* Debian / Ubuntu: `/usr/lib/x86_64-linux-gnu/vlc/plugins/misc`\n* Fedora / RHEL / CentOS: `/usr/lib64/vlc/plugins/misc`\n* Arch Linux: `/usr/lib/vlc/plugins/misc`\n\nYou can verify the active plugin path with `pkg-config --variable=pluginsdir vlc` or override it via `-DVLC_PLUGIN_INSTALL_DIR` when configuring CMake.\n\n### Plugin directory notes\n\nVLC looks for interface plugins under the `vlc/plugins/misc` subtree of its plugin search path. When installing without packaging:\n\n* System-wide installs typically land in `/usr/lib*/vlc/plugins/misc` based on your architecture (`lib` vs `lib64`).\n* User-local installs (e.g., `cmake --install` with `CMAKE_INSTALL_PREFIX=$HOME/.local`) will place the plugin in `${HOME}/.local/lib/vlc/plugins/misc`, which VLC discovers automatically when run from the same prefix.\n* If you pass a custom `-DVLC_PLUGIN_INSTALL_DIR`, ensure the final segment remains `vlc/plugins/misc` so VLC's plugin loader picks it up.\n\n### Gentoo\n\nYou can install this plugin from the `arrans_overlay`.\n\n1. Add the overlay:\n    ```bash\n    eselect repository add arrans_overlay git https://github.com/arran4/arrans_overlay.git\n    emaint sync -r arrans_overlay\n    ```\n\n2. Install the package:\n    ```bash\n    emerge media-video/vlc-xattrplaying_plugin\n    ```\n\n# How to use it\n\nYou will need to enable it in the settings once you have placed it in the correct directory:\n\n![Screenshot_20240615_221813.png](doc/Screenshot_20240615_221813.png)\n\n# Extended attribute requirements\n\nThe tag is stored in the `user.xdg.tags` extended attribute. The filesystem that holds your media must allow writable user xattrs:\n\n* For Linux filesystems such as ext4 or xfs, ensure the mount has `user_xattr` enabled (most distributions do by default).\n* NTFS (including the default WSL mounts) and FAT/FAT32/exFAT generally do **not** expose the `user.*` namespace, so setting `user.xdg.tags` will fail.\n* Read-only mounts (e.g., optical media, read-only bind mounts, or mounts with `ro`) cannot accept new attributes.\n\n## Verifying xattr support\n\nYou can test the capability on a sample file before using the plugin:\n\n```bash\n# Attempt to write a temporary tag\nsetfattr -n user.xdg.tags -v \"seen\" /path/to/video.mp4\n\n# Read it back\ngetfattr -n user.xdg.tags /path/to/video.mp4\n```\n\nIf the first command fails with `Operation not supported` or `Read-only file system`, the filesystem or mount options do not allow writing `user.*` attributes. Move the media to a filesystem that supports user xattrs or remount with the appropriate options.\n## Module options\n\nThe plugin exposes a few options under *Tools → Preferences → Interface → Control interfaces*:\n\n* **Enable tagging** (`xattr-tagging-enabled`, default: on): master switch to write `user.xdg.tags`.\n* **Tag name** (`xattr-tag-name`, default: `seen`): value appended to `user.xdg.tags`.\n* **Skip paths** (`xattr-skip-paths`): comma or newline separated list of absolute path prefixes to skip (e.g., `/tmp,/mnt/ramdisk`).\n\nSet the options via the GUI or by adding the following lines to your `vlcrc`:\n\n```\nlua-intf=xattrplaying_plugin\nxattr-tagging-enabled=1\nxattr-tag-name=seen\nxattr-skip-paths=/tmp,/mnt/ramdisk\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farran4%2Fvlc-xattr-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farran4%2Fvlc-xattr-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farran4%2Fvlc-xattr-plugin/lists"}