@@ -10,7 +10,6 @@ enum ContentType: string
1010{
1111 // Instagram
1212 case InstagramFeed = 'instagram_feed ' ;
13- case InstagramCarousel = 'instagram_carousel ' ;
1413 case InstagramReel = 'instagram_reel ' ;
1514 case InstagramStory = 'instagram_story ' ;
1615
@@ -51,11 +50,16 @@ enum ContentType: string
5150 // Mastodon
5251 case MastodonPost = 'mastodon_post ' ;
5352
53+ /**
54+ * AI generation format for an Instagram carousel. Not a content type —
55+ * carousel posts are persisted as InstagramFeed.
56+ */
57+ public const CAROUSEL_FORMAT = 'instagram_carousel';
58+
5459 public function label (): string
5560 {
5661 return match ($ this ) {
5762 self ::InstagramFeed => 'Feed Post ' ,
58- self ::InstagramCarousel => 'Carousel ' ,
5963 self ::InstagramReel => 'Reel ' ,
6064 self ::InstagramStory => 'Story ' ,
6165 self ::LinkedInPost, self ::LinkedInPagePost => 'Post ' ,
@@ -84,7 +88,7 @@ public function description(): string
8488 public function platform (): SocialPlatform
8589 {
8690 return match ($ this ) {
87- self ::InstagramFeed, self ::InstagramCarousel, self :: InstagramReel, self ::InstagramStory => SocialPlatform::Instagram,
91+ self ::InstagramFeed, self ::InstagramReel, self ::InstagramStory => SocialPlatform::Instagram,
8892 self ::LinkedInPost, self ::LinkedInCarousel => SocialPlatform::LinkedIn,
8993 self ::LinkedInPagePost, self ::LinkedInPageCarousel => SocialPlatform::LinkedInPage,
9094 self ::FacebookPost, self ::FacebookReel, self ::FacebookStory => SocialPlatform::Facebook,
@@ -109,7 +113,6 @@ public function aiImageDimensions(): array
109113 return match ($ this ) {
110114 // Vertical 4:5 (Instagram preferred portrait, Threads mirrors it)
111115 self ::InstagramFeed,
112- self ::InstagramCarousel,
113116 self ::ThreadsPost => ['width ' => 1080 , 'height ' => 1350 ],
114117
115118 // Square 1:1 (LinkedIn, X, Facebook, Bluesky, Mastodon)
@@ -135,7 +138,7 @@ public function aiImageDimensions(): array
135138 public function aspectRatio (): ?string
136139 {
137140 return match ($ this ) {
138- self ::InstagramFeed, self ::InstagramCarousel => '4:5 ' ,
141+ self ::InstagramFeed => '4:5 ' ,
139142 self ::InstagramReel, self ::InstagramStory => '9:16 ' ,
140143 self ::FacebookReel, self ::FacebookStory => '9:16 ' ,
141144 self ::TikTokVideo, self ::YouTubeShort => '9:16 ' ,
@@ -149,8 +152,7 @@ public function aspectRatio(): ?string
149152 public function maxMediaCount (): int
150153 {
151154 return match ($ this ) {
152- self ::InstagramFeed => 1 ,
153- self ::InstagramCarousel => 10 ,
155+ self ::InstagramFeed => 10 ,
154156 self ::InstagramReel, self ::InstagramStory => 1 ,
155157 self ::LinkedInPost, self ::LinkedInPagePost => 1 ,
156158 self ::LinkedInCarousel, self ::LinkedInPageCarousel => 20 ,
@@ -172,7 +174,6 @@ public function supportsVideo(): bool
172174 {
173175 return match ($ this ) {
174176 self ::InstagramFeed, self ::InstagramReel, self ::InstagramStory => true ,
175- self ::InstagramCarousel => false ,
176177 self ::LinkedInPost, self ::LinkedInPagePost => true ,
177178 self ::LinkedInCarousel, self ::LinkedInPageCarousel => false ,
178179 self ::FacebookPost, self ::FacebookReel, self ::FacebookStory => true ,
@@ -237,7 +238,6 @@ public static function aiSupported(): array
237238 {
238239 return [
239240 self ::InstagramFeed,
240- self ::InstagramCarousel,
241241 self ::InstagramStory,
242242 self ::LinkedInPost,
243243 self ::LinkedInPagePost,
0 commit comments