{"_id":"@adam-fisher/n8n-nodes-tag-media","_rev":"2-bf72f1f171ab7b3df72a5992d6c41e28","name":"@adam-fisher/n8n-nodes-tag-media","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@adam-fisher/n8n-nodes-tag-media","version":"1.0.0","keywords":["n8n-community-node-package","n8n","metadata","audio","tagging","id3","exif"],"author":{"name":"Adam Fisher"},"license":"MIT","_id":"@adam-fisher/n8n-nodes-tag-media@1.0.0","maintainers":[{"name":"calmtuna","email":"fisher1987@gmail.com"}],"homepage":"https://github.com/adamfisher/n8n-nodes-tag-media","bugs":{"url":"https://github.com/adamfisher/n8n-nodes-tag-media/issues"},"n8n":{"nodes":["dist/nodes/ReadFileTags/ReadFileTags.node.js","dist/nodes/TagAudioFile/TagAudioFile.node.js","dist/nodes/TagMediaFile/TagMediaFile.node.js","dist/nodes/TagOfficeDocument/TagOfficeDocument.node.js"],"strict":false,"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"974cec6346cdfd4df2892630bc001498d4e8e556","tarball":"https://registry.npmjs.org/@adam-fisher/n8n-nodes-tag-media/-/n8n-nodes-tag-media-1.0.0.tgz","fileCount":29,"integrity":"sha512-/XH/iNo4UT91yZVzd+GUD2XsfwbXypZI694VSDeGLTUGlcTD3yzl2R7HSqNMoEKa2sL082YyMrtXnXwx48kbAA==","signatures":[{"sig":"MEUCIQDc4isjJUKt9F8tegNdwiwTm92QX+BWzTxg+GC/QDO8WQIgEy9vrh2zInkuRs4Z5RlWF+HEyuOAC0SOFNGr/47Y5zg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":670391},"gitHead":"96df0f525ed222887a4808784b29ae5cf92072d5","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","lint:fix":"n8n-node lint --fix","dev:docker":"npm run build && docker compose up --build -d","test:watch":"vitest","build:watch":"tsc --watch","test:coverage":"vitest run --coverage","dev:docker:down":"docker compose down","dev:docker:logs":"docker compose logs -f","dev:docker:rebuild":"npm run build && docker compose up --build --force-recreate"},"_npmUser":{"name":"calmtuna","email":"fisher1987@gmail.com"},"repository":{"url":"git+https://github.com/adamfisher/n8n-nodes-tag-media.git","type":"git"},"_npmVersion":"10.9.4","description":"n8n nodes for embedding metadata into audio, media, and Office document files","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"^4.0.18","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@types/node":"^25.3.3","@n8n/node-cli":"*","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-tag-media_1.0.0_1772427467142_0.2608045396912657","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@adam-fisher/n8n-nodes-tag-media","version":"1.0.1","description":"n8n nodes for embedding metadata into audio, media, and Office document files","license":"MIT","homepage":"https://github.com/adamfisher/n8n-nodes-tag-media","keywords":["n8n-community-node-package","n8n","metadata","audio","tagging","id3","exif"],"author":{"name":"Adam Fisher"},"repository":{"type":"git","url":"git+https://github.com/adamfisher/n8n-nodes-tag-media.git"},"scripts":{"build":"n8n-node build","build:watch":"tsc --watch","dev":"n8n-node dev","dev:docker":"npm run build && docker compose up --build -d","dev:docker:down":"docker compose down","dev:docker:logs":"docker compose logs -f","dev:docker:rebuild":"npm run build && docker compose up --build --force-recreate","lint":"n8n-node lint","lint:fix":"n8n-node lint --fix","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"n8n":{"n8nNodesApiVersion":1,"strict":false,"credentials":[],"nodes":["dist/nodes/ReadFileTags/ReadFileTags.node.js","dist/nodes/TagAudioFile/TagAudioFile.node.js","dist/nodes/TagMediaFile/TagMediaFile.node.js","dist/nodes/TagOfficeDocument/TagOfficeDocument.node.js"]},"devDependencies":{"@n8n/node-cli":"*","@types/node":"^25.3.3","@vitest/coverage-v8":"^4.0.18","eslint":"9.32.0","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","vitest":"^4.0.18"},"peerDependencies":{"n8n-workflow":"*"},"_id":"@adam-fisher/n8n-nodes-tag-media@1.0.1","gitHead":"6fba6a281ec006abe04a7e7f9bb19d63744434ab","bugs":{"url":"https://github.com/adamfisher/n8n-nodes-tag-media/issues"},"_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-uZb5ezaXURDgbkbSeO7jN6HpBoGgRfjV5gzyCuXWMDMQcOrtVTVSPYtVJ01NHr24ttc8ThoWH3qAkUOXxl7dGA==","shasum":"756cc4388d20e97b21a7934e342cd5745e6d3cea","tarball":"https://registry.npmjs.org/@adam-fisher/n8n-nodes-tag-media/-/n8n-nodes-tag-media-1.0.1.tgz","fileCount":33,"unpackedSize":709449,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCEcNQP994fgU/YEZeTiUwhfR7141t//53sQKUxDVBfrAIgDv70nIiXYWeQ8QWKYBEBC/FudOdMu39f3uN1zrtesj8="}]},"_npmUser":{"name":"calmtuna","email":"fisher1987@gmail.com"},"directories":{},"maintainers":[{"name":"calmtuna","email":"fisher1987@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-tag-media_1.0.1_1772429240519_0.47739273313028896"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T04:57:47.059Z","modified":"2026-03-02T05:27:20.887Z","1.0.0":"2026-03-02T04:57:47.305Z","1.0.1":"2026-03-02T05:27:20.747Z"},"bugs":{"url":"https://github.com/adamfisher/n8n-nodes-tag-media/issues"},"author":{"name":"Adam Fisher"},"license":"MIT","homepage":"https://github.com/adamfisher/n8n-nodes-tag-media","keywords":["n8n-community-node-package","n8n","metadata","audio","tagging","id3","exif"],"repository":{"type":"git","url":"git+https://github.com/adamfisher/n8n-nodes-tag-media.git"},"description":"n8n nodes for embedding metadata into audio, media, and Office document files","maintainers":[{"name":"calmtuna","email":"fisher1987@gmail.com"}],"readme":"# n8n-nodes-tag-media\n\nThis is an n8n community node. It lets you read and write metadata tags to media files in your n8n workflows.\n\nThese nodes enable embedding metadata into audio files, images, PDFs, and Office documents - useful for digital asset management, media libraries, automated file organization, and content workflows.\n\n[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.\n\n[Installation](#installation)\n[Operations](#operations)\n[Compatibility](#compatibility)\n[Usage](#usage)\n[Resources](#resources)\n\n## Installation\n\nFollow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.\n\n### Additional Requirements\n\nThis package requires external tools for certain operations:\n\n| Node | Requirement |\n|------|-------------|\n| Tag Audio File | Python 3 + [mutagen](https://mutagen.readthedocs.io/) |\n| Tag Media File | [exiftool](https://exiftool.org/) |\n| Tag Office Document | Python 3 + [python-docx](https://python-docx.readthedocs.io/), [openpyxl](https://openpyxl.readthedocs.io/), [python-pptx](https://python-pptx.readthedocs.io/) |\n| Read File Tags | [exiftool](https://exiftool.org/) |\n\n#### Docker Installation (Recommended)\n\nAdd to your n8n Dockerfile:\n\n```dockerfile\n# Install system dependencies\nRUN apk add --no-cache python3 py3-pip exiftool\n\n# Install Python packages\nRUN pip3 install --break-system-packages mutagen python-docx openpyxl python-pptx\n\n# Install the node package\nRUN cd /usr/local/lib/node_modules/n8n && \\\n    npm install n8n-nodes-tag-media\n```\n\n#### Manual Installation\n\n1. Install system dependencies:\n   ```bash\n   # Debian/Ubuntu\n   apt-get install python3 python3-pip libimage-exiftool-perl\n\n   # Alpine\n   apk add python3 py3-pip exiftool\n\n   # macOS\n   brew install python exiftool\n   ```\n\n2. Install Python packages:\n   ```bash\n   pip3 install mutagen python-docx openpyxl python-pptx\n   ```\n\n3. Install the node package:\n   ```bash\n   cd ~/.n8n/nodes\n   npm install n8n-nodes-tag-media\n   ```\n\n4. Restart n8n\n\n## Operations\n\n<img src=\"images/nodes_overview.jpg\" />\n\n### Tag Audio File\n\nWrite metadata tags to audio files using ID3, Vorbis Comments, and MP4 atoms.\n\n**Supported file types:**\n\n| Format | Tag Standard | Extension |\n|--------|--------------|-----------|\n| WAV | RIFF INFO + ID3v2.3 | `.wav` |\n| MP3 | ID3v2.3 | `.mp3` |\n| FLAC | Vorbis Comments | `.flac` |\n| M4A/AAC | iTunes-style MP4 atoms | `.m4a`, `.aac` |\n| OGG | Vorbis Comments | `.ogg` |\n\n**Standard fields:** Title, Artist, Album Artist, Album, Year, Genre, Track Number, Disc Number, Composer, BPM, Copyright, Publisher, Comment, Lyrics\n\n**Extended properties:** Additional metadata fields with dropdown selection for format-specific tags. See the [Mp3tag field mapping reference](https://docs.mp3tag.de/mapping/) for format compatibility.\n\n---\n\n### Tag Media File\n\nWrite EXIF, IPTC, and XMP metadata to images and documents using exiftool.\n\n**Supported file types:**\n\n| Format | Tag Standards | Extension |\n|--------|---------------|-----------|\n| JPEG | EXIF, IPTC, XMP | `.jpg`, `.jpeg` |\n| PNG | XMP, IPTC | `.png` |\n| TIFF | EXIF, IPTC, XMP | `.tiff`, `.tif` |\n| PDF | XMP, PDF Info | `.pdf` |\n| WebP | EXIF, XMP | `.webp` |\n| GIF | XMP | `.gif` |\n\n**Standard fields:** Title, Creator, Description, Copyright, Keywords\n\n**Extended properties:** Dropdown selection for hundreds of EXIF, IPTC, XMP, PDF, and GPS tags, or specify custom exiftool tag names.\n\n---\n\n### Tag Office Document\n\nWrite document properties to Microsoft Office files.\n\n**Supported file types:**\n\n| Format | Description | Extension |\n|--------|-------------|-----------|\n| Word | Microsoft Word documents | `.docx` |\n| Excel | Microsoft Excel spreadsheets | `.xlsx` |\n| PowerPoint | Microsoft PowerPoint presentations | `.pptx` |\n\n**Standard fields:** Title, Subject, Author, Description, Keywords, Category\n\n**Extended properties:** Additional document properties like Manager, Company, Version, and custom properties.\n\n---\n\n### Read File Tags\n\nRead embedded metadata from any supported file type using exiftool.\n\n**Supported file types:** All formats supported by [exiftool](https://exiftool.org/#supported), including audio, images, video, documents, and more.\n\n**Output options:**\n- Include all fields\n- Include only specific fields\n- Exclude specific fields\n\n## Compatibility\n\n- **Minimum n8n version:** `1.111.0`\n- **Tested with:** n8n `1.111.0`\n\n### Platform Notes\n\n- **Docker:** Recommended for easiest setup of Python and exiftool dependencies\n- **Windows:** Requires Python and exiftool installed and available in PATH\n- **Linux/macOS:** Install dependencies via package manager\n\n## Usage\n\n### Basic Workflow\n\n1. Use a trigger or file input node to get your file\n2. Connect to a Tag node to write metadata\n3. The node outputs the modified file as binary data\n4. Save or process the file further in your workflow\n\n### Example: Tag Audio Files from Database\n\n```\n[Database Trigger] → [HTTP Request (download file)] → [Tag Audio File] → [S3 Upload]\n```\n\n### Example: Add Copyright to Images\n\n```\n[Watch Folder] → [Tag Media File (add copyright)] → [Move File]\n```\n\n### Extended Properties\n\nAll tag nodes support extended properties for format-specific metadata:\n\n1. Enable \"Extended Properties\" in the node settings\n2. Click \"Add Property\"\n3. Select a field from the dropdown or choose \"Custom\" to enter any tag name\n4. Enter the value (supports expressions)\n\n## Resources\n\n* [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)\n* [exiftool documentation](https://exiftool.org/)\n* [mutagen documentation](https://mutagen.readthedocs.io/)\n* [Mp3tag field mapping](https://docs.mp3tag.de/mapping/)\n\n---\n\n## Development\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/) and Docker Compose\n- Node.js v22+\n- npm\n\n### Quick Start\n\n```bash\n# Install dependencies\nnpm install\n\n# Build and start n8n with the custom nodes\nnpm run dev:docker\n```\n\nThen open http://localhost:5678 in your browser.\n\n### Available Scripts\n\n| Script | Description |\n|--------|-------------|\n| `npm run build` | Compile TypeScript to JavaScript |\n| `npm run dev:docker` | Build and start n8n in Docker with custom nodes |\n| `npm run dev:docker:down` | Stop the Docker containers |\n| `npm run dev:docker:logs` | View container logs |\n| `npm run dev:docker:rebuild` | Rebuild and restart containers |\n| `npm run lint` | Check code for errors |\n| `npm run lint:fix` | Auto-fix linting issues |\n| `npm test` | Run tests |\n\n### Development Workflow\n\n1. Make changes to TypeScript files in `nodes/` or Python scripts in `scripts/`\n2. Run `npm run build` to compile\n3. Run `npm run dev:docker:rebuild` to restart n8n with your changes\n4. Test in the n8n web UI at http://localhost:5678\n\n## License\n\n[MIT](LICENSE.md)\n","readmeFilename":"README.md"}