@@ -215,7 +215,7 @@ export default function MediaUpload() {
diff --git a/server/services/cloudinary.ts b/server/services/cloudinary.ts
index 4d48812..e22da9f 100644
--- a/server/services/cloudinary.ts
+++ b/server/services/cloudinary.ts
@@ -31,13 +31,22 @@ class CloudinaryService {
const isVideo = mimeType.startsWith('video/');
- // Upload to Cloudinary (without eager transformations)
+ // Define eager transformations for images (generated during upload)
+ const eagerTransformations = !isVideo ? [
+ { width: 1200, height: 630, crop: 'pad', gravity: 'center', background: 'auto' }, // Facebook Feed
+ { width: 1080, height: 1080, crop: 'pad', gravity: 'center', background: 'auto' }, // Instagram Feed
+ { width: 1080, height: 1920, crop: 'pad', gravity: 'center', background: 'auto' } // Instagram Story
+ ] : undefined;
+
+ // Upload to Cloudinary with eager transformations
const uploadResult = await new Promise
((resolve, reject) => {
const uploadStream = cloudinary.uploader.upload_stream(
{
folder: 'social-flow',
public_id: `${Date.now()}-${fileName.replace(/\.[^/.]+$/, '')}`,
resource_type: isVideo ? 'video' : 'image',
+ eager: eagerTransformations,
+ eager_async: false, // Generate transformations immediately
},
(error, result) => {
if (error) reject(error);
@@ -51,17 +60,15 @@ class CloudinaryService {
const publicId = uploadResult.public_id;
const originalUrl = uploadResult.secure_url;
- // For now, use the original URL for all formats - no transformations
- // The frontend will handle display with CSS to prevent cropping
+ // Extract eager transformation URLs (generated by Cloudinary during upload)
let facebookFeedUrl = null;
let instagramFeedUrl = null;
let instagramStoryUrl = null;
- if (!isVideo) {
- // Use original image for all formats - NO CROPPING
- facebookFeedUrl = originalUrl;
- instagramFeedUrl = originalUrl;
- instagramStoryUrl = originalUrl;
+ if (!isVideo && uploadResult.eager && uploadResult.eager.length === 3) {
+ facebookFeedUrl = uploadResult.eager[0].secure_url; // Facebook Feed (1200x630)
+ instagramFeedUrl = uploadResult.eager[1].secure_url; // Instagram Feed (1080x1080)
+ instagramStoryUrl = uploadResult.eager[2].secure_url; // Instagram Story (1080x1920)
}
return {