Skip to content

The media library stores files in your workspace so you can reference them by ID across multiple posts. Useful for:

  • Brand assets (logos, banners) used in many campaigns
  • Carousel images shared across platforms
  • Long videos you want to clip and reuse

Uploading ​

typescript
import { readFileSync } from 'fs'

const item = await socifyr.media.upload(
  readFileSync('banner.jpg'),
  'banner.jpg',
)
console.log(item.id) // 6a04f715d3d7d93575e65d13
bash
socifyr media upload banner.jpg --alt "Product banner"

Referencing in a post ​

Pass the media ID (or a public URL) directly — Socifyr won't re-upload:

typescript
await socifyr.uploads.photos({
  connections: ['instagram-mybrand'],
  medias: ['6a04f715d3d7d93575e65d13'], // ID
  text: 'Same banner, new caption',
})

// Or a public URL
await socifyr.uploads.photos({
  connections: ['linkedin-myhandle'],
  medias: ['https://cdn.example.com/banner.png'],
})

// Or mix raw files, IDs, and URLs in a carousel
await socifyr.uploads.photos({
  connections: ['instagram-mybrand'],
  medias: [
    readFileSync('img1.jpg'),
    '6a04f715d3d7d93575e65d13',
    'https://cdn.example.com/img3.png',
  ],
})
bash
socifyr post "From the library" \
  --media-id 6a04f715d3d7d93575e65d13 \
  --to instagram-mybrand

# Or a URL
socifyr post "From a CDN" \
  --media-id https://cdn.example.com/banner.png \
  --to linkedin-myhandle

Supported file types ​

TypeExtensions
Image.jpg, .jpeg, .png, .gif, .webp, .heic
Video.mp4, .mov, .avi, .mkv, .webm, .m4v
Document.pdf

Limits ​

TierTotal storageMax single file
Free1 GB100 MB
Pro50 GB500 MB
Business500 GB2 GB

Files are stored on S3-compatible object storage and served via signed URLs that expire after 1 hour — the SDK and CLI refresh them automatically.

Managing the library ​

typescript
// List
const { results, total } = await socifyr.media.list({
  type: 'image',
  search: 'banner',
  limit: 20,
})

// Get one
const item = await socifyr.media.get(id)

// Update metadata
await socifyr.media.update(id, {
  alt: 'New alt text',
  description: 'Updated description',
  tags: ['summer-campaign', 'evergreen'],
})

// Delete
await socifyr.media.delete(id)
await socifyr.media.bulkDelete([id1, id2, id3])