From synapse-upload
Use when source files need format conversion before upload. Triggers on: "convert", "tiff to png", "file format", "unsupported extension".
npx claudepluginhub datamaker-kr/synapse-claude-marketplace --plugin synapse-uploadThis skill uses the workspace's default tool permissions.
Knowledge about when and how to convert files before uploading to a data collection.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Builds scalable data pipelines, modern data warehouses, and real-time streaming architectures using Spark, dbt, Airflow, Kafka, and cloud platforms like Snowflake, BigQuery.
Builds production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. For data pipelines, workflow orchestration, and batch job scheduling.
Knowledge about when and how to convert files before uploading to a data collection.
Conversion is required when source file extensions don't match the data collection's file specification allowed extensions.
Example: Spec image_1 allows [".png", ".jpg"] but the source directory contains .tiff files. The TIFFs must be converted to PNG or JPG before upload.
extensions list)| Source | Target | Notes |
|---|---|---|
.tiff, .tif | .png | Lossless conversion |
.tiff, .tif | .jpg, .jpeg | RGBA/P modes auto-converted to RGB |
.bmp | .png | Lossless conversion |
.bmp | .jpg, .jpeg | Mode conversion applied |
.webp | .png | Lossless conversion |
.webp | .jpg, .jpeg | Mode conversion applied |
.gif | .png | First frame only |
Requirement: Pillow>=10.0 must be installed in the upload plugin environment.
| Source | Target | Notes |
|---|---|---|
.mov | .mp4 | H.264 + AAC, faststart |
.avi | .mp4 | H.264 + AAC, faststart |
.mkv | .mp4 | H.264 + AAC, faststart |
.webm | .mp4 | H.264 + AAC, faststart |
.flv | .mp4 | H.264 + AAC, faststart |
.wmv | .mp4 | H.264 + AAC, faststart |
Requirement: ffmpeg must be available in PATH. Timeout: 600 seconds per file.
| Source | Target | Notes |
|---|---|---|
.wav | .mp3 | Default quality |
.flac | .mp3 | Lossy conversion |
.ogg | .mp3 | Lossy conversion |
.m4a | .mp3 | Lossy conversion |
.wma | .mp3 | Lossy conversion |
.wav | .aac | Default quality |
.flac | .aac | Lossy conversion |
.ogg | .aac | Lossy conversion |
Requirement: ffmpeg must be available in PATH. Timeout: 300 seconds per file.
The ai-upload-plugin has a convert_file tool that handles conversion automatically:
{
"name": "convert_file",
"input": {
"source_path": "/data/patient_001/scan.tiff",
"target_format": ".png"
}
}
Converted files are stored in a temp directory and automatically cleaned up after upload.
If not using the ai-upload-plugin, convert files beforehand:
Images (Pillow):
python3 -c "
from PIL import Image
from pathlib import Path
import sys
src = Path(sys.argv[1])
dst = src.with_suffix('.png')
with Image.open(src) as img:
img.save(dst)
print(f'Converted: {dst}')
" /path/to/image.tiff
Batch image conversion:
python3 -c "
from PIL import Image
from pathlib import Path
import sys
src_dir = Path(sys.argv[1])
for tiff in src_dir.rglob('*.tiff'):
dst = tiff.with_suffix('.png')
with Image.open(tiff) as img:
img.save(dst)
print(f'Converted: {dst}')
" /path/to/directory
Video (ffmpeg):
ffmpeg -i input.mov -c:v libx264 -c:a aac -movflags +faststart output.mp4
Audio (ffmpeg):
ffmpeg -i input.wav output.mp3
Source file extension NOT in spec's allowed extensions?
├── YES → Check if a supported conversion exists
│ ├── YES → Convert the file, use converted path for upload
│ └── NO → Report error: unsupported file format
└── NO → No conversion needed, use source file directly