agentsclimarketplace

File conversion

Skill datamaker-kr/synapse-claude-marketplace/dist/opencode/synapse-upload/.opencode/skills/file-conversion

Use when source files need format conversion before upload. Triggers on: "convert", "tiff to png", "file format", "unsupported extension".From its SKILL.md

Install
npx -y skills add datamaker-kr/synapse-claude-marketplace --skill file-conversion

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.4 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

File Conversion for Synapse Upload

Knowledge about when and how to convert files before uploading to a data collection.

When Conversion Is Needed

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.

Detection Logic

  1. Get the file specs from the data collection (each spec has extensions list)
  2. Scan the source directory for actual file extensions
  3. For each spec, check if source extensions are in the allowed list
  4. If not, determine if a supported conversion exists

Supported Conversions

Image Conversions (via Pillow)

SourceTargetNotes
.tiff, .tif.pngLossless conversion
.tiff, .tif.jpg, .jpegRGBA/P modes auto-converted to RGB
.bmp.pngLossless conversion
.bmp.jpg, .jpegMode conversion applied
.webp.pngLossless conversion
.webp.jpg, .jpegMode conversion applied
.gif.pngFirst frame only

Requirement: Pillow>=10.0 must be installed in the upload plugin environment.

Video Conversions (via ffmpeg)

SourceTargetNotes
.mov.mp4H.264 + AAC, faststart
.avi.mp4H.264 + AAC, faststart
.mkv.mp4H.264 + AAC, faststart
.webm.mp4H.264 + AAC, faststart
.flv.mp4H.264 + AAC, faststart
.wmv.mp4H.264 + AAC, faststart

Requirement: ffmpeg must be available in PATH. Timeout: 600 seconds per file.

Audio Conversions (via ffmpeg)

SourceTargetNotes
.wav.mp3Default quality
.flac.mp3Lossy conversion
.ogg.mp3Lossy conversion
.m4a.mp3Lossy conversion
.wma.mp3Lossy conversion
.wav.aacDefault quality
.flac.aacLossy conversion
.ogg.aacLossy conversion

Requirement: ffmpeg must be available in PATH. Timeout: 300 seconds per file.

Conversion in the Upload Workflow

Using the ai-upload-plugin's Built-in Conversion

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.

Manual Conversion Before 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

Conversion Decision Tree

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

Important Notes

  • Converted files use a temporary directory that is cleaned up after the upload completes
  • For large datasets, conversion can be the bottleneck — consider pre-converting files outside the upload workflow
  • Image conversion preserves the original filename stem, only changing the extension
  • RGBA/Palette mode images are automatically converted to RGB when targeting JPEG format
  • If ffmpeg is not installed, video/audio conversions will fail gracefully with a warning

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.