このMCPでできること
Creates and validates scripted iMessage, WhatsApp, Instagram DM, Reddit, and chat-style videos or screenshots.
ツール
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.25, 'description': 'Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1.'}, 'theme': {'enum': ['light', 'dark'], 'type': 'string', 'description': 'Color theme, "light" or "dark". Default: light.'}, 'script': {'type': 'string', 'description': 'Conversation as a plain-text script. Use this OR messages, not both.\n\nConversation script format (one event per line):\n\nthem: hey, you up?\nme: yeah why\n[pause 1.5] wait 1.5 s\n--- Today 9:41 PM date/time separator\nme: [photo URL] caption a photo (URL, local file path, or an uploaded photo\'s number)\n[them reacts â\x9d¤ï¸\x8f] reaction on my last message\n[read] they read my messages\n=== everything above is already on screen at the start\n=== scroll 3 same, but open on the oldest message and skim down in 3 s\n# comment\n\n"Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\\n" inside a message becomes a line break. Lines starting with # are comments.\n\nPhotos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.'}, 'sounds': {'type': 'boolean', 'description': "Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 60, 'description': 'Contact display name shown in the header. Also usable as the "them" prefix in script lines. Default: Alex.'}, 'avatar': {'type': 'string', 'maxLength': 3000000, 'description': 'Contact avatar as an image URL or a data: URI. Omitted: an initials monogram is drawn instead.'}, 'unread': {'type': 'integer', 'maximum': 9999, 'minimum': 0, 'description': 'Unread-count badge shown on the back button.'}, 'subtitle': {'type': 'string', 'maxLength': 60, 'description': 'Text under the contact name, e.g. WhatsApp "online" or Instagram "Active now". Default depends on platform.'}, 'verified': {'type': 'boolean', 'description': 'Show a verified badge next to the contact name.'}}, 'description': 'Contact header info.'}, 'endHold': {'type': 'number', 'maximum': 15, 'minimum': 0, 'description': 'Seconds to hold on the final frame before the video ends. Default: 2.'}, 'autoRead': {'type': 'boolean', 'description': 'Mark "me" messages as read as soon as the other person starts typing. Default: true.'}, 'keyboard': {'type': 'boolean', 'description': 'Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true.'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typing?, hold?, time?, instant?} (type "message" is the default and can be omitted), {type:"pause", seconds}, {type:"timestamp", text, instant?}, {type:"read", time?}, {type:"react", from:"me"|"them", emoji}.'}, 'platform': {'enum': ['imessage', 'whatsapp', 'instagram'], 'type': 'string', 'description': 'Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage.'}, 'startTime': {'type': 'string', 'maxLength': 20, 'description': 'Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM.'}, 'statusBar': {'type': 'object', 'properties': {'time': {'type': 'string', 'maxLength': 10, 'description': 'Status bar clock text, e.g. "9:41". Default: startTime without AM/PM.'}, 'wifi': {'type': 'boolean', 'description': 'Show the wifi icon in the status bar. Default: true.'}, 'signal': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Cell signal bars, 0-4. Default: 4.'}, 'battery': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Battery percentage shown in the status bar. Default: 100.'}, 'recording': {'type': 'boolean', 'description': 'Red pill behind the time, as in an iPhone screen recording. Makes the clip read as a real screen recording. Default: false.'}}, 'description': 'Phone status bar shown at the top of the frame.'}, 'composerTyping': {'type': 'boolean', 'description': 'Type "me" messages into the input bar before sending them. Default: true.'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'frame': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame of the conversation.'}, 'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.25, 'description': 'Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1.'}, 'theme': {'enum': ['light', 'dark'], 'type': 'string', 'description': 'Color theme, "light" or "dark". Default: light.'}, 'script': {'type': 'string', 'description': 'Conversation as a plain-text script. Use this OR messages, not both.\n\nConversation script format (one event per line):\n\nthem: hey, you up?\nme: yeah why\n[pause 1.5] wait 1.5 s\n--- Today 9:41 PM date/time separator\nme: [photo URL] caption a photo (URL, local file path, or an uploaded photo\'s number)\n[them reacts â\x9d¤ï¸\x8f] reaction on my last message\n[read] they read my messages\n=== everything above is already on screen at the start\n=== scroll 3 same, but open on the oldest message and skim down in 3 s\n# comment\n\n"Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\\n" inside a message becomes a line break. Lines starting with # are comments.\n\nPhotos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.'}, 'sounds': {'type': 'boolean', 'description': "Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 60, 'description': 'Contact display name shown in the header. Also usable as the "them" prefix in script lines. Default: Alex.'}, 'avatar': {'type': 'string', 'maxLength': 3000000, 'description': 'Contact avatar as an image URL or a data: URI. Omitted: an initials monogram is drawn instead.'}, 'unread': {'type': 'integer', 'maximum': 9999, 'minimum': 0, 'description': 'Unread-count badge shown on the back button.'}, 'subtitle': {'type': 'string', 'maxLength': 60, 'description': 'Text under the contact name, e.g. WhatsApp "online" or Instagram "Active now". Default depends on platform.'}, 'verified': {'type': 'boolean', 'description': 'Show a verified badge next to the contact name.'}}, 'description': 'Contact header info.'}, 'endHold': {'type': 'number', 'maximum': 15, 'minimum': 0, 'description': 'Seconds to hold on the final frame before the video ends. Default: 2.'}, 'autoRead': {'type': 'boolean', 'description': 'Mark "me" messages as read as soon as the other person starts typing. Default: true.'}, 'keyboard': {'type': 'boolean', 'description': 'Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true.'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typing?, hold?, time?, instant?} (type "message" is the default and can be omitted), {type:"pause", seconds}, {type:"timestamp", text, instant?}, {type:"read", time?}, {type:"react", from:"me"|"them", emoji}.'}, 'platform': {'enum': ['imessage', 'whatsapp', 'instagram'], 'type': 'string', 'description': 'Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage.'}, 'startTime': {'type': 'string', 'maxLength': 20, 'description': 'Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM.'}, 'statusBar': {'type': 'object', 'properties': {'time': {'type': 'string', 'maxLength': 10, 'description': 'Status bar clock text, e.g. "9:41". Default: startTime without AM/PM.'}, 'wifi': {'type': 'boolean', 'description': 'Show the wifi icon in the status bar. Default: true.'}, 'signal': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Cell signal bars, 0-4. Default: 4.'}, 'battery': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Battery percentage shown in the status bar. Default: 100.'}, 'recording': {'type': 'boolean', 'description': 'Red pill behind the time, as in an iPhone screen recording. Makes the clip read as a real screen recording. Default: false.'}}, 'description': 'Phone status bar shown at the top of the frame.'}, 'composerTyping': {'type': 'boolean', 'description': 'Type "me" messages into the input bar before sending them. Default: true.'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.25, 'description': 'Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1.'}, 'theme': {'enum': ['light', 'dark'], 'type': 'string', 'description': 'Color theme, "light" or "dark". Default: light.'}, 'script': {'type': 'string', 'description': 'Conversation as a plain-text script. Use this OR messages, not both.\n\nConversation script format (one event per line):\n\nthem: hey, you up?\nme: yeah why\n[pause 1.5] wait 1.5 s\n--- Today 9:41 PM date/time separator\nme: [photo URL] caption a photo (URL, local file path, or an uploaded photo\'s number)\n[them reacts â\x9d¤ï¸\x8f] reaction on my last message\n[read] they read my messages\n=== everything above is already on screen at the start\n=== scroll 3 same, but open on the oldest message and skim down in 3 s\n# comment\n\n"Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\\n" inside a message becomes a line break. Lines starting with # are comments.\n\nPhotos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.'}, 'sounds': {'type': 'boolean', 'description': "Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 60, 'description': 'Contact display name shown in the header. Also usable as the "them" prefix in script lines. Default: Alex.'}, 'avatar': {'type': 'string', 'maxLength': 3000000, 'description': 'Contact avatar as an image URL or a data: URI. Omitted: an initials monogram is drawn instead.'}, 'unread': {'type': 'integer', 'maximum': 9999, 'minimum': 0, 'description': 'Unread-count badge shown on the back button.'}, 'subtitle': {'type': 'string', 'maxLength': 60, 'description': 'Text under the contact name, e.g. WhatsApp "online" or Instagram "Active now". Default depends on platform.'}, 'verified': {'type': 'boolean', 'description': 'Show a verified badge next to the contact name.'}}, 'description': 'Contact header info.'}, 'endHold': {'type': 'number', 'maximum': 15, 'minimum': 0, 'description': 'Seconds to hold on the final frame before the video ends. Default: 2.'}, 'autoRead': {'type': 'boolean', 'description': 'Mark "me" messages as read as soon as the other person starts typing. Default: true.'}, 'keyboard': {'type': 'boolean', 'description': 'Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true.'}, 'messages': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typing?, hold?, time?, instant?} (type "message" is the default and can be omitted), {type:"pause", seconds}, {type:"timestamp", text, instant?}, {type:"read", time?}, {type:"react", from:"me"|"them", emoji}.'}, 'platform': {'enum': ['imessage', 'whatsapp', 'instagram'], 'type': 'string', 'description': 'Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage.'}, 'startTime': {'type': 'string', 'maxLength': 20, 'description': 'Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM.'}, 'statusBar': {'type': 'object', 'properties': {'time': {'type': 'string', 'maxLength': 10, 'description': 'Status bar clock text, e.g. "9:41". Default: startTime without AM/PM.'}, 'wifi': {'type': 'boolean', 'description': 'Show the wifi icon in the status bar. Default: true.'}, 'signal': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Cell signal bars, 0-4. Default: 4.'}, 'battery': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Battery percentage shown in the status bar. Default: 100.'}, 'recording': {'type': 'boolean', 'description': 'Red pill behind the time, as in an iPhone screen recording. Makes the clip read as a real screen recording. Default: false.'}}, 'description': 'Phone status bar shown at the top of the frame.'}, 'composerTyping': {'type': 'boolean', 'description': 'Type "me" messages into the input bar before sending them. Default: true.'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'post': {'type': 'object', 'properties': {'age': {'type': 'string', 'maxLength': 20, 'description': 'Post age, e.g. "5h". Default: "5h".'}, 'body': {'type': 'string', 'maxLength': 40000, 'description': 'Post body text; each line becomes its own paragraph and gets its own reading beat.'}, 'flair': {'type': 'string', 'maxLength': 60, 'description': 'Post flair, e.g. "Not the A-hole".'}, 'image': {'type': 'string', 'maxLength': 15000000, 'description': 'A photo under the title: image URL or data: URI.'}, 'score': {'type': 'string', 'maxLength': 12, 'description': 'Post votes as shown, e.g. "14K". Default: made up, always above the top comment.'}, 'title': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'The post title. Required when not using script â\x80\x94 this is the hook, on screen from frame 0.'}, 'author': {'type': 'string', 'maxLength': 40, 'description': 'Poster\'s username. Default: "throwaway_4412".'}, 'comments': {'type': 'string', 'maxLength': 12, 'description': 'Comment count shown on the post, e.g. "1.2K". Default: made up.'}, 'flairColor': {'type': 'string', 'maxLength': 30, 'description': 'Flair background color (CSS color). Default: a Reddit blue.'}}, 'description': 'The post. Use this OR script, not both.'}, 'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.25, 'description': 'Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. Use 1.3-1.5 for a faster reel.'}, 'theme': {'enum': ['light', 'dark'], 'type': 'string', 'description': 'Color theme, "light" or "dark". Default: light.'}, 'script': {'type': 'string', 'description': "Thread as a plain-text script. Use this OR post/comments, not both.\n\nReddit thread script format (post + nested comments):\n\ntitle: AITA for not going to my sister's wedding?\nbody: First paragraph of the post (optional, one line per paragraph)\nbody: Second paragraph\n[photo URL] a photo in the post (URL, file path or uploaded photo's number)\nsleepy_joe: A top-level comment\n> OP: A reply by the post's author (blue OP label)\n>> sleepy_joe [2.1K 3h]: A reply to that reply, with its votes and age\n[91 more replies] collapsed replies under the comment above\n[pause 2] wait 2 s\n# comment\n\nThe video is a screen recording of a thread on mobile reddit.com in iOS Safari: the page is laid out once and the view scrolls from block to block, holding each one long enough to read. The title is on screen from frame 0. Scores and ages left out of the script are generated (decreasing down the thread, never older than the post)."}, 'endHold': {'type': 'number', 'maximum': 15, 'minimum': 0, 'description': 'Seconds to hold on the final frame before the video ends. Default: 2.'}, 'comments': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Comments as an array of event objects instead of a script string (use this OR script, not both). Each item is one of: {author, text, depth (0 top-level, 1 reply to the nearest depth-0 comment above, 2 reply to that, â\x80¦), score?, age?, op?, avatar?, moreReplies?, hold?} or {type:"pause", seconds}. "op" or an author matching the post author gets the blue OP label automatically.'}, 'statusBar': {'type': 'object', 'properties': {'time': {'type': 'string', 'maxLength': 10, 'description': 'Status bar clock text, e.g. "9:41". Default: "9:41".'}, 'wifi': {'type': 'boolean', 'description': 'Show the wifi icon in the status bar. Default: true.'}, 'signal': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Cell signal bars, 0-4. Default: 4.'}, 'battery': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Battery percentage shown in the status bar. Default: 100.'}, 'recording': {'type': 'boolean', 'description': 'Red pill behind the time, as in an iPhone screen recording. Makes the clip read as a real screen recording. Default: false.'}}, 'description': 'Phone status bar shown above the Safari toolbar.'}, 'subreddit': {'type': 'object', 'properties': {'icon': {'type': 'string', 'maxLength': 3000000, 'description': 'Subreddit icon as an image URL or a data: URI. Omitted: a plain fallback community icon.'}, 'name': {'type': 'string', 'maxLength': 40, 'description': 'Subreddit shown in the header and post byline, without "r/". Default: "AskReddit".'}}, 'description': 'The subreddit the thread is posted in.'}}}
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'post': {'type': 'object', 'properties': {'age': {'type': 'string', 'maxLength': 20, 'description': 'Post age, e.g. "5h". Default: "5h".'}, 'body': {'type': 'string', 'maxLength': 40000, 'description': 'Post body text; each line becomes its own paragraph and gets its own reading beat.'}, 'flair': {'type': 'string', 'maxLength': 60, 'description': 'Post flair, e.g. "Not the A-hole".'}, 'image': {'type': 'string', 'maxLength': 15000000, 'description': 'A photo under the title: image URL or data: URI.'}, 'score': {'type': 'string', 'maxLength': 12, 'description': 'Post votes as shown, e.g. "14K". Default: made up, always above the top comment.'}, 'title': {'type': 'string', 'maxLength': 400, 'minLength': 1, 'description': 'The post title. Required when not using script â\x80\x94 this is the hook, on screen from frame 0.'}, 'author': {'type': 'string', 'maxLength': 40, 'description': 'Poster\'s username. Default: "throwaway_4412".'}, 'comments': {'type': 'string', 'maxLength': 12, 'description': 'Comment count shown on the post, e.g. "1.2K". Default: made up.'}, 'flairColor': {'type': 'string', 'maxLength': 30, 'description': 'Flair background color (CSS color). Default: a Reddit blue.'}}, 'description': 'The post. Use this OR script, not both.'}, 'frame': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame of the thread.'}, 'speed': {'type': 'number', 'maximum': 4, 'minimum': 0.25, 'description': 'Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. Use 1.3-1.5 for a faster reel.'}, 'theme': {'enum': ['light', 'dark'], 'type': 'string', 'description': 'Color theme, "light" or "dark". Default: light.'}, 'script': {'type': 'string', 'description': "Thread as a plain-text script. Use this OR post/comments, not both.\n\nReddit thread script format (post + nested comments):\n\ntitle: AITA for not going to my sister's wedding?\nbody: First paragraph of the post (optional, one line per paragraph)\nbody: Second paragraph\n[photo URL] a photo in the post (URL, file path or uploaded photo's number)\nsleepy_joe: A top-level comment\n> OP: A reply by the post's author (blue OP label)\n>> sleepy_joe [2.1K 3h]: A reply to that reply, with its votes and age\n[91 more replies] collapsed replies under the comment above\n[pause 2] wait 2 s\n# comment\n\nThe video is a screen recording of a thread on mobile reddit.com in iOS Safari: the page is laid out once and the view scrolls from block to block, holding each one long enough to read. The title is on screen from frame 0. Scores and ages left out of the script are generated (decreasing down the thread, never older than the post)."}, 'endHold': {'type': 'number', 'maximum': 15, 'minimum': 0, 'description': 'Seconds to hold on the final frame before the video ends. Default: 2.'}, 'comments': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Comments as an array of event objects instead of a script string (use this OR script, not both). Each item is one of: {author, text, depth (0 top-level, 1 reply to the nearest depth-0 comment above, 2 reply to that, â\x80¦), score?, age?, op?, avatar?, moreReplies?, hold?} or {type:"pause", seconds}. "op" or an author matching the post author gets the blue OP label automatically.'}, 'statusBar': {'type': 'object', 'properties': {'time': {'type': 'string', 'maxLength': 10, 'description': 'Status bar clock text, e.g. "9:41". Default: "9:41".'}, 'wifi': {'type': 'boolean', 'description': 'Show the wifi icon in the status bar. Default: true.'}, 'signal': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Cell signal bars, 0-4. Default: 4.'}, 'battery': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Battery percentage shown in the status bar. Default: 100.'}, 'recording': {'type': 'boolean', 'description': 'Red pill behind the time, as in an iPhone screen recording. Makes the clip read as a real screen recording. Default: false.'}}, 'description': 'Phone status bar shown above the Safari toolbar.'}, 'subreddit': {'type': 'object', 'properties': {'icon': {'type': 'string', 'maxLength': 3000000, 'description': 'Subreddit icon as an image URL or a data: URI. Omitted: a plain fallback community icon.'}, 'name': {'type': 'string', 'maxLength': 40, 'description': 'Subreddit shown in the header and post byline, without "r/". Default: "AskReddit".'}}, 'description': 'The subreddit the thread is posted in.'}}}
最近のツール変更
類似のMCPサーバー
Andreax
Offers pay-per-call AI services for inference, agent and workflow design, OCR and transcription, code generation and review, clas…
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…
Hermoso
Supports ad research, competitor analysis, video and static ad creation, campaign policy checks, content publishing, and performa…
ElevenLabs
Manages ElevenLabs speech, voices, pronunciation dictionaries, podcasts, dubbing, audio projects, workspaces, and related media r…
John's Essentials
Analyzes and converts documents, images, audio, video, archives, data files, and other media formats, with PDF chat and file insp…
MiOffice — AI-Powered Workspace Studio
Provides browser-based tools for processing PDFs, images, video, and audio, including generation, enhancement, conversion, transc…
BlitzReels Video Editor
Creates and edits short-form videos, including timelines, captions, transitions, AI-generated visuals, music, voiceovers, sound e…
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…