Step 1 of 7

Let's create your first social posts

The Social Post Creator uses AI to write engaging posts and generate matching images, giving you a batch of ready-to-publish content in minutes.

We'll walk you through a few quick settings, then generate 3 posts so you can see how it works.

Generate Ads

Describe your offer and let AI create unique, diverse ad images — ready to download.

Click to upload a reference image

Your generated ads will appear here

Style Match Ads

Upload ads that are already winning and generate new ones in the same look and feel.

Click to upload high-performing ads
Products, logos, headshots, brand refs

Your style-matched ads will appear here

Generated Ads

0 ads

Campaign History

No campaigns yet

Social Post Creator

Generate a full content calendar — AI-written posts with matching images, planned to avoid repetition across all days.

Click to upload a brand image or visual reference

Your generated posts will appear here

Generated Posts

0 posts

Post Session History

No sessions yet

User Management

UsernameEmailRoleStatusCreditsCreatedActions

Features & Changelog

What you can do with each tool, and what's new.

New Campaigns

Generate complete Facebook ad sets from a single topic. AI creates multiple ad variations with unique angles, layouts, and color palettes, then renders images with Gemini and writes social post copy for each ad.

Style Match

Feed in ads that are already performing and generate new ones that look like they came from the same designer. Add your own product shots, logo, headshots or brand references in a second box and tag what each one is. Pick how closely to match — a loose nod to the style, the same design system with a fresh layout, or a straight clone of the reference composition.

Split Test Lab

Turns a batch of ads into an actual experiment. It writes several distinct angles — each becoming its own ad set — and gives every angle a set of image variants that share identical copy, so the first round measures the creative and nothing else. Once an image wins, the next rounds hold it fixed and vary the hook, then the body, then the call to action, one at a time. Connect a Meta Ads System User token and it can build the campaign for you.

Social Posts

Create batches of social media posts powered by source material you provide — paste text, upload a document, enter a URL, or pull a YouTube transcript. Match your writing style, generate images or go text-only, and create HeyGen talking-head videos.

History

Browse and reload any past campaign or post session. Clone a previous session to reuse its settings and source material as a starting point for new content, or rename sessions to keep things organized.

Cinematic Video (admin)

Turn a storytelling script into a finished short film. The AI breaks the script into scenes and shots, builds a locked asset library of characters and locations for consistency, storyboards each shot with a suggested video model, generates keyframes and a timed animatic to check pacing, then renders and stitches every shot with per-character voices, music, and captions.

Calendar

See all your scheduled posts in one place — across GoHighLevel, Meta (Facebook & Instagram), and LinkedIn. A visual day grid shows exactly when each post is set to publish.

Changelog

v2.78.0 Sep 10, 2026
  • Clone a split test and relaunch it as a second campaign (v2.78.0). Clone test on any test makes a full copy — the settings, the reference images, the angles, the ad copy and the generated images — as a fresh draft with nothing on Meta. The settings panel opens on the copy straight away, so the way to run the same creative at a bigger budget, in another country, or against a new landing page is now to copy it rather than to edit a test that is already delivering.
  • Why copying rather than editing. Meta resets an ad set's learning phase when its targeting or budget changes, which makes the numbers either side of the edit incomparable and throws away the reading you were waiting for. A clone leaves the original running untouched.
  • The copy leaves behind everything that belonged to the original's run: the Facebook campaign link, the performance history, the nightly sync state, the recommendation inbox, and any ad the kill rules had already killed — relaunching a proven loser only spends the money twice.
  • Images are shared with the original rather than re-rendered, so a clone costs nothing and is instant no matter how many ads it holds. Editing or re-rendering an image on either test still leaves the other one alone.
v2.77.2 Sep 10, 2026
  • Fixed: a traffic or awareness campaign stopped its own nightly sync (v2.77.2). The check that catches a mis-set conversion event fired whenever Meta reported none — which is the normal, expected state for an objective Meta is not aiming at conversions with. It raised a false alarm every night and, worse, halted the sync before the rule engine and the “who's converting” analysis ever ran. It now only applies to campaigns that optimise for conversions; the others get a one-off note explaining that no conversions is the expected result.
  • Traffic campaigns do not attach a pixel — and the picker now says so (v2.77.1). Meta does not attach a conversion pixel to a traffic ad set in any configuration; an attempt to do so is rejected outright. That is Meta's design, not a setting. The objective is now labelled Traffic (no pixel optimisation), and the note explains that your pixel still tracks and conversions are still reported — Meta simply is not aiming at them.
  • If you want the pixel optimised for and visibly attached, choose Leads or Sales and set your pixel event as the conversion event. That combination is a conversions campaign by definition, which is what Meta steers you towards in its own interface.
  • A rejected promoted object no longer costs the whole push: the ad set is created without one instead of failing, so targeting, budget and ads all still land.
  • Traffic campaigns now attach your pixel (v2.77.0). Traffic was set to optimise for link clicks, which takes no pixel — so the pixel you chose was stored correctly but never appeared on the campaign in Ads Manager, and there was no way to tell by looking that it was wired up. Traffic now optimises for landing page views instead, which is a better signal anyway: a click that bounces before the page loads is not traffic. Your pixel is attached so page loads can be counted.
  • Meta is still not aiming at your conversion event under Traffic, so ads are ranked on link CTR and the CPA kill rules stay off — but conversions are reported as normal. With no pixel set it falls back to link clicks and says so on the push dialog rather than refusing.
  • Fixed: a Traffic campaign would not push — “the following combinations of click-through and view-through attribution window values are allowed: (1, 0)” (v2.76.2). Ad sets were still being sent the conversion attribution window (7-day click, 1-day view), which Meta only accepts for conversion optimisation. The window now follows the objective like the optimisation goal and the pixel already did: 1-day click for Traffic, none at all for Awareness. If Meta ever names a different allowed pair, the push now adopts the one it asked for instead of failing.
  • The objective is now in test settings too, not just on the new-test form (v2.76.1). It is editable while nothing has been pushed, and shown read-only once the campaign exists — Meta fixes a campaign's objective at creation and will not change it, so the route for a live campaign is Disconnect, change it, push again. The campaign's objective is also now named on the Meta panel, so what a campaign is set up as is visible without opening anything.
  • Choose the campaign objective. Every campaign was created as Sales regardless of what the setup form said, because the objective was never actually sent to Meta — so a traffic campaign came out conversion-shaped, with a pixel event bolted onto an ad set that should not have had one. You now pick Sales, Leads, Traffic or Awareness, and the ad set is built to match: traffic optimises for link clicks and awareness for reach, neither carrying a pixel event.
  • The form says what the choice costs as you make it. Under Traffic or Awareness there is no conversion for Meta to optimise towards, so the CPA kill rules cannot fire and ads are ranked on link CTR instead — stated at the moment of choosing rather than discovered a week later. Your conversion event is still recorded for reporting.
  • A pixel is no longer demanded for objectives that do not use one, which previously blocked the push outright.
  • The duplicate is now scored against the ad set it duplicates. A head-to-head panel compares the two on impressions, clicks, CTR, spend, conversions and CPA — counted only from the moment the duplicate launched, so the original gets no credit for the weeks it ran first. It waits for $25 of spend on both sides, uses cost per conversion once both have the volume for it and click rate before that, and says which it used.
  • “Pause the original ad set” appears only once the duplicate has actually won, and the server re-checks that before pausing anything. Every verdict carries the caveat that matters: the two ad sets overlap in the auction by construction, so this is evidence rather than a controlled test.
  • Fixed: a stale page could show an old version indefinitely. Nothing cache-busts index.html itself, so a browser holding an old copy showed an old changelog and loaded old scripts while the server underneath was current. The page now compares what it was built with against what the server reports and reloads itself once if they differ.
v2.75.0 Sep 9, 2026
  • Act on a “who converts” finding in one step. A finding like “Canada has spent $400 with no conversions” now has an Act on this button that duplicates the ad set with that segment excluded. The duplicate carries the same creatives — not copies, the very same Meta creative objects — so the copy, headline and video file are identical and only the targeting differs. Where a creative is backed by a Page post, both ads share that post, so likes and comments keep accumulating in one place.
  • Both ad sets run side by side; the original is never paused for you. Two identical ads can perform very differently on delivery alone, so a duplicate has to earn its place before a proven ad set is retired. The trade-off is stated plainly in the dialog: the duplicate targets a subset of the same people, so the two compete in the auction and cost more while both run.
  • Age exclusions now show what they really cost. Meta gives an ad set a single age range, so removing a band from the middle is impossible — excluding 45–54 from 18–65 leaves 18–44 and 55–65, and one ad set cannot hold both. Both remainders are offered with the spend and conversions each one would give up, priced from your own data. Neither is preselected.
  • Country exclusions use Meta's own exclusion field rather than editing the country list, so they work even when an ad set targets by region, city or radius. Findings that would exclude everything an ad set targets are refused with the reason.
  • A duplicate is marked as a targeting challenger, and the nightly creative rules skip it. Every ad in it is identical to one in the original, so picking a “winner” between them would be reporting delivery noise as a result.
  • Ads paused by the kill rules or rejected by Meta are left out of the duplicate, with the reason listed, rather than re-spending on a known loser. Everything is created paused and spends nothing until you launch it.
v2.74.0 Sep 9, 2026
  • “Who's converting” findings now reach you on their own. The country, age, gender and placement analysis existed only behind a button, so a campaign could spend for weeks in a country that had never converted and nothing would say so unless you thought to look. It now runs as part of the nightly check and its findings land under Recommendations with everything else — dead spend, results bunched in one segment, and segments well above or below your average cost.
  • These never pause anything, and they stay quiet until there are enough conversions to mean something — splitting a handful of conversions across countries and age bands leaves single figures per segment, which is noise, not a finding. A finding is not repeated once it is already in your inbox, but dismissing one lets it come back if the pattern is still true later.
  • A “Watching” panel on every live test. It says when the next check runs, whether auto-kill is armed, and exactly what each rule is waiting for — with your own thresholds filled in, not described in prose, so it cannot drift from what the rules actually do. Previously the only signal that anything was keeping an eye on a test was a “Last synced” timestamp.
  • Each recommendation now carries a label saying what kind it is — an ad being paused and a dead-spend finding need acting on very differently, and the titles alone did not separate them.
v2.73.0 Sep 9, 2026
  • Disconnect a test from its Meta campaign, so it can be rebuilt. The Page baked into every creative, the pixel on each ad set, and whether the budget sits on the campaign are all fixed by Meta at creation and cannot be edited afterwards. When one of them was wrong there was no way forward: the test stayed permanently tied to a campaign it could not fix. There is now a Disconnect from Meta action that cuts the link so the same ads — same copy, same images — can be pushed again as a new campaign.
  • It never touches Meta. No Meta call is made: the old campaign, its ad sets and its ads stay in the ad account exactly as they were. Because pushing afterwards creates a second campaign, the dialog says plainly that the original is yours to delete or archive in Ads Manager.
  • Two independent confirmations. An acknowledgement checkbox and typing the campaign ID, with the full list of what is deleted on screen while you decide — the synced performance history goes for good, and it cannot be re-pulled afterwards. The server independently requires the ID to match, so the enabled button is a convenience rather than the guard. Ad copy, images, angles and completed stage winners are kept, as are the images already uploaded to Meta.
  • Refused on imported tests, where the campaign is the whole point of the test — deleting the test is the honest action there, and it leaves the campaign untouched.
v2.72.0 Sep 9, 2026
  • Choose which pixel each test optimises for. Every campaign used the single Pixel ID set in Settings, with no way to pick another — so a campaign for one brand was optimised against, and reported conversions from, whichever pixel happened to be configured. There is now a Pixel (dataset) picker on the setup form and in test settings, listing the pixels the connected Meta token can actually use. Unlike the Page, the pixel lives on the ad set rather than the creative, so it can be changed mid-test — but it only governs ad sets created after the change. Hidden on imported tests, whose ad sets reuse the pixel of the ad set they were cloned from.
  • A pixel that has never fired is now called out. The picker labels it and explains the consequence: conversions read zero, Meta cannot optimise delivery towards it, and the kill rules would treat that as failure rather than as a configuration problem.
  • Only pixels assigned to your Meta connection appear in the list. A dataset that exists in your Business but was never assigned to the connection is invisible to the tool — which is the usual reason a pixel you just created is missing.
  • Fixed: “Sync now” said “Synced — no-op” and pulled nothing. Once a day had been synced — by the nightly run or by an earlier press of the button — every later sync that day found the finished job and skipped straight past it without contacting Meta. Pressing Sync now re-opens the day and re-pulls it, so numbers that have accumulated since the last sync appear. A day whose sync failed is re-opened too, instead of staying wedged until tomorrow.
  • The sync message now says what it fetched. It reports the date the data runs through, e.g. “data through 2026-09-08, 0 decisions”. Meta only reports complete days, so the leaderboard always trails what Ads Manager shows live for today — a campaign gathering stats right now will not show them here until tomorrow.
v2.71.0 Sep 8, 2026
  • Choose which Facebook Page the ads run from. Every ad used the single Page set in Settings, with no way to see the alternatives or pick a different one per test. There is now a Page picker on the setup form and in test settings, listing the Pages the ad account can actually advertise for. Meta writes the Page into each creative at creation and creatives are immutable, so this governs ads created from that point on — ads already pushed keep their Page and can only be moved by deleting and pushing them again. The picker is hidden on imported tests, whose ads run from whatever Page the original advertiser used.
v2.70.0 Sep 8, 2026
  • Fixed: new ad sets ignored the imported campaign's audience. They were built with the schema defaults — United States, ages 18–65, and no interest targeting — rather than the countries, age band and interests the campaign actually used. That is not a stricter test, it is a different audience, and its results were never comparable with the ads it was meant to beat. New ad sets now inherit the audience and override only the delivery settings (placements pinned, Advantage+ audience off), which is the part that genuinely keeps a creative test clean. Imported tests seed their countries and age band at import, and existing ones have a Match the imported campaign's audience button in settings.
  • Who's converting. A new panel reads Meta's own country, age, gender and placement breakdowns and reports where the money goes versus where the results come from — spend in segments that have never converted, conversions bunched in one country, bands well above or below average cost. Each finding proposes a concrete next test, and they feed into angle generation so new creative is written for the people actually buying. Volume floors throughout: with too few conversions to split meaningfully, it says so instead of inventing a pattern.
v2.69.1 Sep 8, 2026
  • Go live now shows progress. Activating is one Meta call per ad set and per ad, and it used to run as a single silent request — indistinguishable from a hung page. It now works in slices and reports back, so a real progress bar moves as ads go live. The push got the same bar, counting ads rather than ad sets.
  • Launching is resumable. A large test could previously exceed the request limit part-way through activating, leaving some ads live and no clear way to finish. Each pass activates what fits and reports what is left; already-active ads are skipped rather than re-sent, and a round is only stamped as launched once every ad under it is actually live.
v2.69.0 Sep 8, 2026
  • Refreshing keeps your place in Split Test Lab. The URL now tracks which test you are looking at (#split/12), and the import and setup screens too, so a reload returns you there instead of dropping you back at the list to click your way in again. Links to a specific test can be shared or bookmarked. The URL is rewritten in place rather than pushed, so Back still leaves the tool in one step rather than walking every screen you visited.
v2.68.3 Sep 8, 2026
  • Fixed: pushing new ad sets into an imported campaign failed immediately. The push loop walked every ad set on the test, including the imported ones, and the server correctly refuses to push those — so it stopped on the first one and no new ad set was ever created. It now pushes only the ad sets built here. Nothing was half-created by the failure; the guard fired before anything was sent to Meta.
v2.68.2 Sep 8, 2026
  • You now choose how many images per angle. On an imported test this was never asked for — it was derived at import as (imported ads ÷ imported ad sets), a number describing the campaign being read rather than how wide the next test should be, and it then silently governed every angle generated afterwards. Building angles from a winner now asks for both counts and shows the credit cost before you commit, and the number is editable in test settings.
v2.68.1 Sep 8, 2026
  • Rebuild an image from scratch. When a render comes out fundamentally wrong, editing it means negotiating with a bad starting point. The ad reviewer now has Rebuild this image, which discards the current one and renders fresh from the original spec, with a different reference leading the composition each time so it does not drift back to the same result. The copy is untouched. The existing image stays on screen until the new one lands, so a failed render costs a credit and nothing else.
v2.68.0 Sep 8, 2026
  • Choose the image model. Every ad rendered on Gemini 3 Pro with no way to say otherwise. There is now a picker next to the Generate button and on the setup form, showing the credit cost per image, and the estimate follows your choice. Gemini 3.1 Flash is roughly half the price and is the same family — it is already what a timed-out Pro render falls back to, so it is not an exotic option. Pro still renders text better, which matters when the headline is doing the work.
  • Reference images no longer hide themselves. The upload control lived inside a warning that only appeared when there were zero references, so adding the first one made the only way to add a second disappear. There is now a permanent panel showing every reference as a thumbnail, tagged with what it is, each removable, with the upload control and the written visual style always present.
v2.67.3 Sep 8, 2026
  • Images can be generated with no reference ads. A campaign whose ads are all video has no still to match, and generation refused to run at all. You can now generate a written visual style from the imported ads' own copy — subject matter, lighting, register, how text sits — review and edit it, and render from that. The prompt is explicitly barred from inventing brand colours, typefaces or logos, since ad copy cannot know them. (v2.67.0)
  • Reference images can be added to an existing test, and you choose what each one is: a reference ad from any brand (used for its look only — the model is told not to copy its wording or branding), or your own product, logo or brand material, which are reproduced faithfully rather than imitated. Previously everything uploaded became a style reference, so there was no way to tell the tool what your product actually looks like. (v2.67.1)
  • A conversion diagnostic. "Conversions read as zero" and "there were no conversions" looked identical. Check conversions now asks Meta what it actually reports for the campaign and lists every event with its totals, ranked, with a note on each explaining the difference — pixel events, custom conversions and Meta's aggregates all count the same sales differently. Pick one and the whole history is recounted, not just the last week. (v2.66.2)
  • Build new angles from an ad that already works. An imported ad set cannot be promoted — there is no stage to advance and promoting would pause your own live ads. Ticking the ads that performed now feeds their copy and real numbers to the AI, which works out why they won and designs new angles from it. Thin results are labelled so a CPA from two conversions is not treated as proof. (v2.66.1)
  • Fixes. Unreadable white-on-white code labels in the dark theme; video ads importing without their thumbnail; ads with no image now say why instead of showing a blank tile; and the version in the corner is correct again — it had been stuck at 2.65.1 since the import work began. (v2.67.2)
v2.66.0 Sep 8, 2026
  • Import an existing Facebook campaign. Split Test Lab could only build a campaign from scratch, so an account already running ads started from nothing. You can now point it at a live campaign and pull it in with up to 90 days of history: its ad sets become angles, its ads become variants, and the leaderboard, CPA/CTR figures and Bayesian verdicts all work on them straight away.
  • It never touches the campaign you imported. Go live only activates ad sets created here, Pause only pauses those, and the automatic kill rules are switched off for imported ads entirely — they are read for their numbers and nothing else. If the campaign itself is paused, activating it is a separate question you are asked explicitly, because that would restart every other ad in it.
  • New ad sets go into the same campaign. They copy how the existing ad sets are optimised and billed, rather than assuming a sales objective — so a leads or traffic campaign is extended correctly instead of being rejected by Meta. Where a campaign's ad sets are configured differently from each other, you choose which one to copy rather than the tool guessing.
  • Campaigns with nothing to convert are still useful. Traffic and awareness campaigns have no conversion to measure, so they are ranked on link CTR and cost per link click instead of showing an empty CPA column.
  • Video, catalog and boosted-post ads import too. Their copy cannot always be read, and the tool says which ones and why rather than silently dropping them — their spend is real and belongs on the leaderboard either way.
  • Two sync bugs fixed along the way. A sync that needed more than five passes was being marked failed even when nothing had gone wrong, and a long metrics pull could be driven with the wrong date window. Both affected large tests already, not just imports.
  • Build new angles from an ad that already works. An imported ad set cannot be "promoted" — there is no test stage to advance, and promoting would pause your own live ads. Ticking the ads that performed and pressing Build new angles from this winner now feeds their copy and real numbers to the AI, which works out why they won and designs new angles from it. Thin results are labelled as such so a CPA measured on two conversions is not treated as proof. (v2.66.1)
  • Imported ads can become style references. New images are composed from reference ads, and an imported test started with none — so the first batch came out generic with no explanation. You can now adopt the ads that work as references, and the tool warns you when there are none rather than quietly producing off-brand images. (v2.66.1)
  • Creative fields are requested explicitly, which fixes video ads importing without their thumbnail. Where an image still cannot be fetched, the ad now says why instead of showing a blank tile. (v2.66.1)
v2.65.0 Sep 7, 2026
  • Fixed creatives being rejected. Meta retired the single "standard enhancements" field that switched off Advantage+ creative changes, and now requires every enhancement to be named individually. Ads now opt out of each one by name.
  • It heals itself when Meta renames them. There is no published list of valid names and they change, so a rejected name is dropped and the request retried rather than failing the push — and the list is a runtime setting, so a future rename is a config change instead of a deploy.
  • Now using the names Meta actually accepts — it lists the valid keys in its own rejection message, so the code reads that list and keeps the intersection instead of guessing one name at a time. Worth knowing: the set is much narrower than the retired bundle. Image touch-ups and text rewriting can no longer be refused on this endpoint at all. (v2.65.1)
  • You are told when an opt-out is lost. The push warns if Meta refused any of them or reports an enhancement still switched on. This matters more than it sounds: with enhancements on, Meta rewrites headlines and crops images per impression, so two "identical" variants stop being identical and the test measures Meta's edits rather than yours.
v2.64.0 Sep 7, 2026
  • Compare image models on a real ad. Open any ad and press "Compare image models": the same prompt and the same reference images go to Gemini 3 Pro, Gemini 3.1 Flash, Seedream v4 and FLUX.1 Kontext max, and the four come back side by side with cost per image and cost per fifty.
  • Because the only question that matters — can a cheaper model hold your reference style and spell the headline correctly — cannot be answered from a price list.
  • Worth knowing: fal's "nano banana" models are the Gemini models we already call directly, so routing through them would be the same model with a second margin on top. The comparison uses genuinely different engines.
v2.63.0 Sep 7, 2026
  • Fixed the push error. Meta now requires campaigns to state whether ad sets may share budget with each other when the budget sits on the ad sets. We send false deliberately: lending 20% of an ad set's budget to its neighbours means judging an angle on a budget it never actually got.
  • Campaign budget optimisation is now an option, on the setup form and in a test's settings, with the budget field relabelling itself from "per ad set" to "for the whole campaign".
  • It is off by default, and the screen says why: CBO spends more efficiently, but an angle Meta starves looks exactly like an angle that failed. Comparing images within an angle still works either way — comparing angles against each other does not. Spend-triggered kill rules also fire days apart between favoured and starved ad sets.
  • Which level holds the budget is fixed when the campaign is created on Meta, so the switch locks itself once a test has been pushed rather than letting the record drift from what is live.
v2.62.0 Sep 7, 2026
  • Fixed image renders that timed out and could never be retried. Raising the reference-image budget to 5 MB for the 10-reference change made reference-heavy renders slow enough to miss the 90-second timeout on every attempt. Each render now uses at most six references and a 3.5 MB budget, with a longer timeout for headroom.
  • Which six matters. When a campaign has more references than a render can carry, the one leading that ad's composition is kept, then your own assets — the actual product and logo, whose absence makes an ad wrong rather than merely off-style — and spare reference ads are dropped first. You can still upload ten; each ad uses a rotating subset, which is what makes a batch of ads structurally varied rather than ten versions of one layout.
v2.61.0 Sep 7, 2026
  • Test settings can be changed after the fact. Countries, ages, target CPA, budget, kill multiple, conversion event, call to action and the never-mention list are all editable from a Settings button on the test. Ad sets already created on Meta keep what they were built with, and the dialog says so — editing a live ad set resets Meta's learning phase and makes the data either side of the change incomparable.
  • Auto-kill is now a switch. Turned off, the kill rules still run and still report what they would have done — they just don't act. Worth leaving off for a first test.
  • Any image can be retried individually, from inside the reviewer, whatever state the last attempt left behind.
  • Fixed: an image edit that died mid-render left an ad with no picture and no way to ask for another one. Edits no longer clear the existing image — the original stays on screen and is only replaced once the new render lands, so a failure now costs one wasted render and nothing else.
  • The policy check now says when it is happy, not only when it isn't: a green line confirming how many ads were screened and what was looked for. A checker that only speaks up to complain is indistinguishable from one that never ran. (v2.61.1)
  • A "Next" line at the top of every test saying what the tool is waiting for you to do — and, once the ads are live, that it is now waiting on Meta rather than on you.
v2.60.0 Sep 7, 2026
  • Meta's ad rules are now built into the writing. Every copy and image prompt carries Meta's actual advertising standards, written as concrete rewrites rather than vague warnings. The big one: an ad may not assert or imply it knows something personal about the reader. "Depression counselling available" is fine; "Depression getting you down?" is a rejection. Same for age, money, and anything medical.
  • No competitors, ever. The copy is instructed never to name another company, and the image model is told not to re-render any brand name, logo or watermark it can see in your reference ads — the quiet way a competitor's branding was ending up in a generated image.
  • A "never mention" list on the split test setup, for the brands and phrases you want banned by name.
  • Every ad is screened after it is written. Prompts drift, so what comes back is checked too: personal attributes, cure claims, guaranteed outcomes, results-in-N-days, before-and-after, body shaming, clickbait, and your banned list. Flagged ads are marked in the grid; open one and it names the rule, quotes the phrase and explains the fix.
  • The warning is loud because the failure is silent: a rejected ad still reports as active while delivering nothing, so it doesn't look broken — it looks like a creative that flopped, and it drags down whichever angle it sits in.
  • The screen never blocks a push. It is conservative, not infallible, and the call stays yours.
v2.59.0 Sep 7, 2026
  • Review any ad full size. Click a thumbnail in a split test and the ad opens at full size, with arrow keys to move through the rest of the angle. The grid is for seeing the shape of the test; this is where an ad is actually judged.
  • Edit an image with a prompt. "Move the headline off his face", "make the price bigger" — the rendered image is edited in place, layout and typography intact, one ad at a time before anything reaches Facebook.
  • Edit the copy the same way. Rewrite the hook, body, headline, link description and button by instruction, or type them yourself. At the creative stage the edit applies to every ad in the angle, because they are supposed to be identical — that is what makes it a test of the image.
  • Both editors refuse to touch an ad that is already on Meta, where creatives are immutable and a local edit would just make our records lie about what ran.
  • Countries are a picker now, not a box you have to know the two-letter codes for, with presets for the groupings people actually buy.
  • Reference ads: up to 10 winning ads and 10 of your own assets, up from 5 and 6.
v2.58.0 Sep 5, 2026
  • Early indicators. Every time an ad wins, its first day, first two days and first three days are recorded and compared against the ads it beat. Over time this answers the question you actually care about: what does a winner look like before you have spent enough to be sure?
  • Running ads get an early read. Each live ad is placed against its own ad set — "top third on click rate, which has gone on to win 54% of the time in your history" — so a laggard can be killed on day two instead of waiting for it to burn through the CPA threshold.
  • Comparisons are relative to each ad's own ad set rather than absolute, which cancels out partial first days and the fact that a good click rate for one offer is a bad one for another.
  • Meta's own delivery split is tracked as an indicator in its own right: the share of impressions it hands each ad is effectively its early prediction, available well before any conversions are.
  • It refuses to guess. Every rate carries a confidence interval and is compared against the rate you would get by chance. A pattern is only presented as real once there is enough of it and the edge is big enough to change a decision — three perfect results out of three is reported as "too early", not as a finding.
v2.57.0 Sep 5, 2026
  • Split Test Lab now reads its own results and acts on them. Performance is pulled from Meta nightly (or on demand), and each ad set gets a leaderboard with spend, link CTR, conversions and CPA per variant.
  • Ads that spend past your kill threshold without converting are paused automatically — but never below two live ads per ad set, and never more than three a day, because emptying an ad set stops delivery and resets Meta's learning. Ads that are converting are only ever flagged for you, never killed.
  • Winners are called honestly. With a handful of conversions no test is conclusive, so the decision is made on link click-through rate and says so out loud. When the data genuinely cannot separate two variants it says "no measurable difference" instead of picking one, and where the lead is weak it carries the top two forward rather than gambling on one.
  • Promote a winner and the next round writes itself. The winning element is frozen, losing ads are paused, and a fresh set of variants is drafted that changes only the next thing — hook, then body, then call to action. Stages 1–3 reuse the winning image, so they cost copy generation only.
  • Every angle shows which parts are actually proven by testing and which are still the untested starting draft.
v2.56.0 Sep 5, 2026
  • Split Test Lab can now build the campaign for you. One click creates the Meta campaign, an ad set per angle, and an ad per variant — images uploaded, creatives assembled, everything paused. Going live is a separate, explicitly confirmed action, so nothing spends until you say so.
  • Dry run shows the exact payloads that would be sent to Meta without sending anything, and each variant can be previewed through Meta's own renderer — which also validates the whole creative before it exists.
  • Advantage+ creative enhancements are explicitly turned off, and audience expansion and placements are pinned. Left on, Meta rewrites your copy and shifts your placements between variants, and you end up measuring its changes rather than yours.
  • The push is resumable and safe to retry. Meta has no way to make ad creation idempotent, so each ad carries a key in its name and a repeated push adopts what already exists instead of creating duplicates.
  • Rejected ads are surfaced as such. A disapproved ad reports itself as active while delivering nothing, so it is flagged in the UI and excluded from the numbers.
v2.55.0 Sep 4, 2026
  • Split Test Lab (admin only) — a fourth tool that generates a structured testing matrix instead of a one-off batch. Give it your winning reference ads and an offer, and it writes a set of distinct marketing angles, each with a complete baseline ad.
  • Each angle becomes its own ad set, and gets a configurable number of image variants that all share identical copy — so stage 0 measures the creative and nothing else. Later stages hold the winning image fixed and vary the hook, then the body, then the CTA, one at a time.
  • Meta Ads connection in Settings, using a Business Manager System User token. It is stored separately from the existing Meta connection, because that one holds a Page token which cannot create ads.
  • Cost estimate before generating, and a resumable image loop that runs three at a time — a 50-image test takes about ten minutes instead of half an hour, and closing the tab no longer loses the run.
v2.54.2 Aug 31, 2026
  • The admin user list now shows each user's email address.
v2.54.1 Aug 31, 2026
  • Signup now allows one account per email address. Emails are matched case-insensitively, and Gmail dot/+tag aliases (e.g. u.s.e.r+promo@gmail.com) are treated as the same address, to prevent duplicate accounts re-collecting the welcome credits.
v2.54.0 Aug 31, 2026
  • New tool: Style Match Ads. Upload ads that are already winning and generate new ones in the same look and feel — instead of the randomised styling the standard Ad Generator uses. Add your own assets in a second box (product shots, logo, headshots, brand references) and tag what each one is, so the ad places them correctly.
  • Choose how closely to match per campaign: Loose (same brand world, free composition), Balanced (same style system, new layout), or Clone (reuse the reference layout as a template).
  • Upload several winning ads and each generated ad rotates through them as its lead reference, so you get real variety instead of one design repeated.
  • Style Match campaigns appear in History with their own badge, and reuse the existing review tools — regenerate copy, edit an image with an instruction, and download the whole set as a ZIP. The standard Ad Generator is unchanged.
v2.53.0 Aug 31, 2026
  • Billing is now available to everyone — add a card, top up credits, and set automatic top-ups from the new Billing tab. (Cinematic remains admin-only.)
  • Admins get a Pricing & margins panel in Billing: set a per-service margin (or a global default), adjust each provider's raw cost as pricing shifts, and monitor real cost-vs-revenue and realised margin per service over the last 7/30/90 days.
v2.52.0 Aug 31, 2026
  • Credit pricing is now tied directly to real provider costs. Every paid service — text, images, video, voice, lip-sync, sound effects, music, captions, avatar videos — is metered at its actual cost plus a standard margin. Prices update automatically if a provider's cost changes. Image, video, and avatar-video credit costs rise to reflect true costs; text (writing) costs drop. Nothing an external service does is unbilled anymore.
v2.51.1 Aug 30, 2026
  • Admin — the user list now shows each account's live credit balance from the new ledger, instead of the frozen pre-migration number.
v2.51.0 Aug 29, 2026
  • Billing (admin) — a new Billing area to add a card on file and top up credits, powered by Stripe hosted checkout. Auto top-up when your balance runs low, with a monthly limit. Plumbing only for now; it stays inactive until payments are configured.
v2.50.0 Aug 28, 2026
  • New credit-ledger billing system. Your balance is now tracked as an append-only ledger of every grant and charge, which makes it accurate and fully auditable. Prices are unchanged. Every account starts with a 500-credit opening balance.
v2.49.54 Aug 24, 2026
  • Cinematic: lip-sync now happens on the Video tab, not during assembly — so you can review each voiced scene in its finished form before compiling. When you generate (or turn on "Use generated voice" for) a dialogue shot, it generates your ElevenLabs voice and lip-syncs the clip's mouth to it right there; the card then previews the finished voiced clip. It's cached per shot, with "Redo"/"Retry" controls. Assembly no longer waits on lip-sync (it only fills in as a safety net if a voiced clip is somehow missing).
v2.49.53 Aug 24, 2026
  • Cinematic: "Use generated voice" shots are now properly lip-synced to your ElevenLabs voice. During assembly, each such shot is passed (clip + your voice) through a lip-sync model that re-animates the mouth to match your audio — so you get a consistent chosen voice AND matching lips, instead of the model's varying voice or a drifting overlay. It's cached (only runs once per shot unless you regenerate the clip or change the line), best-effort per shot (~$0.20/shot), and adds a little time to assembly. Shots left on the clip's own audio are untouched.
v2.49.52 Aug 24, 2026
  • Cinematic: added a warning when "Use generated voice" is ticked on a clip that already has its own lip-synced talking (veo / kling-3). Overriding a native-audio clip with a separately-recorded voice can't match the animated lips — the warning now points you to untick it and use the clip's own perfectly-synced audio instead.
v2.49.51 Aug 24, 2026
  • Cinematic: found and fixed the remaining audio drift. Separately from the sample-rate fix, each shot's video could land a frame short of its target length (frame-rounding, and the trim step can only shorten, never extend), so the picture fell progressively behind the audio. Each shot's video is now over-padded before the exact trim, guaranteeing its length matches the audio to the frame — voices stay locked to the picture across the whole film.
  • Cinematic: your generated background music is now kept across re-assembles instead of being regenerated each time. Re-assembling reuses the exact track from your last assembly (so a take you like is preserved); a "Regenerate music" checkbox on the final screen makes a fresh one or applies description changes when you want a change.
v2.49.50 Aug 24, 2026
  • Cinematic: fixed the injected voices drifting out of sync in the stitched final cut. The video runs at 24fps but the audio was 44.1kHz, which don't divide evenly (1837.5 samples per frame) — so a tiny rounding error accumulated at every shot boundary and slid the voice off the picture the further into the film you got. Audio is now 48kHz (exactly 2000 samples per frame), so every shot stays sample-locked to the video and the voices stay in sync all the way through. Re-assemble to get the corrected mix.
v2.49.49 Aug 24, 2026
  • Cinematic: full control over the background music. Beyond the mood presets, the final screen now has an editable "Music description" box — pick a mood to pre-fill it, then rewrite it however you want (specific instruments, tempo, no drums, how it should build, etc.). Your description is sent straight to the music generator.
v2.49.48 Aug 24, 2026
  • Cinematic: fixed background music silently not being added. The music generator returns its file under a field name we weren't reading, so the finished track was treated as "failed" and skipped every time. Now read correctly — and music generation failures are logged instead of swallowed, so any future issue is diagnosable. Re-assemble to get music in your cut.
v2.49.47 Aug 21, 2026
  • Cinematic: the Sound FX tab now opens with each prompt pre-filled. If a shot already has an SFX prompt it's shown for you to tweak; otherwise the AI reads the scene and suggests fitting sound effects (e.g. "echoing footsteps, dripping water, distant machinery") as an editable starting point — so you're adjusting rather than writing from scratch. A "✨ Suggest prompts" button re-fills any empty ones on demand.
v2.49.46 Aug 21, 2026
  • Cinematic: new Sound FX tab. For each silent clip you can now write exactly what it should sound like (e.g. "distant crowd murmur, footsteps on stone"), generate the effects, and preview them per shot before assembling — regenerate or remove any you don't like. Whatever you set is used in the final cut; shots you don't touch are still auto-filled during assembly. Reachable from the stage bar or the "🔊 Sound FX →" button on the Video screen once you have clips.
v2.49.45 Aug 21, 2026
  • Cinematic: silent clips now get sound effects. During the final assembly, any shot whose model doesn't make its own audio (wan, hailuo, kling-2.5) and has no dialogue gets ambient foley matched to what's on screen (via MMAudio, ~half a cent per clip), instead of playing in dead silence. Clips with their own audio or dialogue are untouched; it's best-effort per shot, so a failure just leaves that clip silent under the music.
v2.49.44 Aug 21, 2026
  • Cinematic: background music is now a real full-length track instead of a tiny looped snippet. The assembly generates an instrumental piece (via CassetteAI text-to-music) sized to the whole film and mixes it under the dialogue — no more 2-second loop repeating endlessly. (Films longer than ~3 minutes may repeat the track once; a few cents per assembly.)
v2.49.43 Aug 20, 2026
  • Cinematic: fixed a 500 error when starting/re-assembling the final cut. A transient database timeout while writing the initial assembly state wasn't being retried, so it surfaced as a hard failure; all the assembly's database writes now retry through the same backoff used elsewhere, so a cold-DB blip no longer derails an assemble.
v2.49.42 Aug 20, 2026
  • Cinematic: background music now actually works in the final cut. Previously the chosen mood was saved but never reached the stitcher, so it did nothing. The assembly now composes a mood-matched music bed (via MMAudio) and mixes it quietly under the dialogue across the whole film. Music is optional — if it can't be generated, the film still assembles without it.
v2.49.41 Aug 20, 2026
  • Cinematic: the final cut now uses each clip's own audio when the model generated it (veo-3.1, kling-3.0-pro) — the model's dialogue + sound effects, perfectly synced to its animation — instead of muting it and overlaying a separately-generated voice that drifts out of time. Each shot has a new "Use generated voice" toggle to override back to the ElevenLabs voice per shot. Clips from models that don't make their own speech (wan, hailuo, kling-2.5) still use the generated voice. This reverses the earlier "audio off" cost saving, so veo/kling-3 clips cost more again (veo ~$3.20, kling-3 ~$0.84) — the model picker shows the updated prices.
v2.49.40 Aug 20, 2026
  • Cinematic: prompts are now auto-softened to avoid the video model's content-safety checker — high-risk wording in the shot's visual description is swapped for neutral, still-filmable language (e.g. "lifeless" → "unconscious", "corpse" → "fallen figure") before the keyframe and video are generated. Spoken dialogue is left untouched. New scripts are also broken down with safer phrasing up front. Regenerate the keyframe (then the video) on a flagged shot to apply it.
  • Cinematic: fixed the skip flag not being honoured by the assembly/stage gates — you can now assemble the final cut (and advance stages / build the animatic) once every non-skipped shot is done, instead of being told "every shot needs a completed video".
v2.49.39 Aug 20, 2026
  • Cinematic: added a "Skip from final cut" toggle on each shot in the video screen. Flagged shots are excluded from the compile (and from the done/cost/stuck counts and the "Assemble" gate), so a single shot that keeps getting rejected — e.g. by the video model's safety checker — no longer blocks you from assembling the rest of the film.
v2.49.38 Aug 20, 2026
  • Cinematic: added a per-generation fal ledger — every shot video now records a "submit" entry at the moment fal is charged (with the exact model, resolution, duration and request id + our $ estimate), plus "success" (with file size and generation time) and "failed" (with the real reason) entries. Viewable at /api/admin/video-log, which also rolls up total estimated spend. This makes it easy to confirm we're not over-spending: exactly one charge per generation, minimal durations, no duplicate submits.
v2.49.37 Aug 20, 2026
  • Cinematic: fixed a wan-2.6 regression from v2.49.36 — it was being sent resolution "480p", which wan-2.6 doesn't accept (only 720p/1080p), causing every wan shot to fail. wan now uses 720p on Low (still cheaper than its old 1080p default) and 1080p on High.
  • Cinematic: much better failure logging — when a shot's video fails, we now capture fal.ai's actual error message (bad parameter, safety-checker rejection, unsupported image, etc.) instead of a bare "Failed to fetch result (422)", show it on the shot card, and record it in the admin error log so recurring failures are diagnosable.
v2.49.36 Aug 20, 2026
  • Cinematic — big fal cost cuts: native audio is now forced OFF on every shot (we always overlay our own voice/music, so the model's audio was pure waste) — that alone cuts veo-3.1 ~50% and kling-3.0-pro ~33%. Added a Low/High resolution toggle on the video screen (defaults to Low ≈ half cost). The model picker now shows the real fal price per clip (e.g. veo-3.1 ~$1.60 ⚠, wan ~$0.20) with a warning on premium models, and the video screen shows the real "cost to finish" in dollars instead of misleading credits.
  • Cinematic: the video and animatic screens now lazy-load clips (show a keyframe poster, only fetch the video when you press play) so 20+ embedded videos no longer hammer browser memory.
v2.49.35 Aug 17, 2026
  • Cinematic: when video generation fails because the fal.ai balance is exhausted, you now get a clear "top up your balance" message instead of a generic "failed — retry", and "Generate all remaining" stops immediately instead of hammering through dozens of doomed attempts.
v2.49.34 Aug 17, 2026
  • Cinematic: fixed the "Reset stuck" button falsely counting shots that had just been submitted and were still generating. It now only flags shots that have been processing far longer than any real generation takes (~12 min), so freshly-started shots are left alone.
v2.49.33 Aug 17, 2026
  • Cinematic: added a "Reset stuck" button on the video screen. If shots are wedged on "processing" (e.g. a generation job that expired days ago and can never return), this clears them back to un-generated so you can regenerate them.
v2.49.32 Aug 17, 2026
  • Cinematic: a shot stuck "processing" (e.g. an expired generation job) now times out after ~9 minutes and becomes clickable again to retry, instead of spinning forever.
v2.49.31 Aug 17, 2026
  • Cinematic: fixed shot video generation hanging or silently failing under load. Database write blips during generation are now retried, so a shot can't be orphaned after it's submitted or get stuck mid-download — and stuck shots now self-heal on the next check.
  • "Generate" now shows the shot as processing immediately, and "Generate all remaining" reports progress, no longer stops at the first hiccup, retries once, and tells you exactly which shots (if any) need a re-click.
v2.49.30 Aug 15, 2026
  • Cinematic: you can now change a shot's video model directly on the animatic and video screens (previously storyboard-only) — so if a "seamless" shot warns it needs Kling, you can switch it right there instead of going back.
v2.49.29 Aug 15, 2026
  • Cinematic: the "Seamless into next shot" toggle now appears on all three stages — storyboard, animatic, and video. It's the same flag everywhere, so setting it on one page shows up on the others as you jump between them during the final edit.
v2.49.28 Aug 15, 2026
  • Cinematic: added an "Auto-detect continuations" button on the storyboard — the AI flags which shots flow into the next with no cut and sets the "Seamless into next shot" toggles for you, without changing your models, cameras or durations. Lets existing projects use seamless continuity without re-storyboarding.
v2.49.27 Aug 15, 2026
  • Cinematic: seamless scene continuity. Shots that flow into the next with no cut can now end exactly on the next shot's opening frame, so continuation scenes no longer jump. The AI flags likely continuations in the storyboard and you can toggle "Seamless into next shot" on any shot.
  • Seamless joins use the next shot's keyframe as the clip's end frame (Kling 2.5 / 3.0 only) — the storyboard warns and nudges the model when needed. Fresh-cut shots and the animatic are unchanged.
v2.49.26 Aug 13, 2026
  • Cinematic video screen now shows each shot's scene number, action, dialogue and camera under the clip, so you can watch and confirm the video matches the script.
  • Regenerating a shot now opens a dialog: describe the change you want, and/or edit the exact prompt that built the shot (your edits are saved for next time). Nothing regenerates until you confirm.
  • The stage bar lets you jump forward to any stage whose work is already done — rebuilding the animatic no longer traps you away from your finished shot videos. Renamed the animatic's confusing "generate shot videos" button to "Continue to shot videos" (it never charged anything).
v2.49.25 Aug 13, 2026
  • Fixed the intermittent "failed (500)" seen on the very first action right after an update (a cold-start database hiccup that used to surface as an error, then worked on refresh). The first request now shrugs it off and self-heals instead of erroring.
  • Errors are now recorded to a persistent log (admin → errors), so any future glitch can be diagnosed after the fact instead of vanishing.
v2.49.24 Aug 13, 2026
  • Cinematic: fixed audio slowly drifting out of sync over long animatics. Each shot's voice is now padded to fill its frame-aligned slot and joined losslessly, with a single final audio encode — so picture and sound stay locked from the first shot to the last.
v2.49.23 Aug 12, 2026
  • Cinematic: the animatic/final stitch no longer uses fal's merge tool (which kept failing). Videos are now assembled by a dedicated ffmpeg service, so shots concat reliably with per-character voices and burned captions.
v2.49.20 Aug 10, 2026
  • Cinematic: animatic shots are now sized to their full voiceover (base clip looped to the voice length, then audio merged), fixing the ~2s cutoff.
v2.49.19 Aug 10, 2026
  • Cinematic: fixed animatic shots being capped at ~2 seconds and cutting off longer voiceovers 2014 each shot now holds long enough for its full dialogue (or its shot duration when silent).
v2.49.18 Aug 10, 2026
  • Cinematic: the animatic screen now shows each shot clip live as it's generated (with its dialogue), so you can review shots individually while the build runs 2014 no need to wait for the full stitch to spot a problem.
v2.49.17 Aug 10, 2026
  • Cinematic: the stitch 422 is fully fixed 2014 the generated silent audio now matches the dialogue clips' sample rate (44.1kHz), so all clips concat cleanly. Only the silent shots rebuild; dialogue clips are preserved.
v2.49.16 Aug 10, 2026
  • Cinematic: fixed the animatic/final stitch failing (HTTP 422) when some shots had dialogue and others didn't 2014 every shot clip now carries a uniform audio track (voice or silence), so the concat no longer rejects the mix. Clips are versioned so old ones rebuild once.
v2.49.15 Aug 10, 2026
  • Cinematic: fixed assembly stalling at the stitch step and showing a “Build” button mid-run — the concat/music/caption phases weren't recognised as “in progress”, so the cron stopped driving them and the UI looked idle. All active phases are now handled uniformly (cron keeps driving, UI shows live progress).
v2.49.14 Aug 10, 2026
  • The app HTML is no longer browser-cached, so new versions load automatically without a manual hard-refresh (fixes stale UI showing an old cinematic screen)
v2.49.13 Aug 10, 2026
  • Cinematic: the cron now runs schema migrations and auto-recovers an assembly that failed from a first-deploy migration race — so server-side runs heal themselves without a manual restart
v2.49.12 Aug 10, 2026
  • Cinematic: assembly is now resumable — each shot's built clip is saved, so a restart skips finished shots (52/66 done means only 14 to build) instead of starting over. The stitch phase resumes too.
  • Cached clips auto-refresh when you change a keyframe, shot video, or dialogue, so edits are always reflected.
v2.49.11 Aug 10, 2026
  • Cinematic: while an animatic/final assembly is running, the screen now shows live progress (with a Cancel option) instead of a “Build” button — so an in-progress run can no longer be accidentally restarted from step one
v2.49.10 Aug 10, 2026
  • Cinematic: smoother server-side assembly — a driver now releases its lease when it yields, so the next tick resumes immediately instead of stalling for a minute between batches
v2.49.9 Aug 10, 2026
  • Cinematic: animatic and final assembly now run fully on the server (cron-driven, leased) — you can close the window and they keep going; reopening shows live progress or the finished video
v2.49.8 Aug 10, 2026
  • Cinematic: fixed the animatic “Build/Rebuild” button re-showing the old failure instead of starting a fresh build (the click event was being mistaken for a “resume” flag, so it skipped the reset)
v2.49.7 Aug 10, 2026
  • Cinematic: fixed animatic/final assembly failing on long films — clips are now stitched in batches (recursively) instead of one oversized merge call that fal rejected. Re-running reuses existing keyframes and dialogue audio.
v2.49.6 Aug 10, 2026
  • Cinematic: optional per-asset “physical scale / weight” note — injected into every keyframe and video prompt that uses the asset, so size and mass stage correctly (e.g. a huge, heavy object isn't framed as something a person casually holds)
v2.49.5 Aug 9, 2026
  • Cinematic: the stage progress bar is now clickable — jump back to any reached stage (e.g. Assets or Storyboard) and forward again without re-running generation
  • Cinematic: re-running the storyboard or breakdown now asks for confirmation so you don't accidentally overwrite edits
v2.49.4 Aug 9, 2026
  • Cinematic: keyframe generation never falls back to a reference-less (text-only) image — it always keeps the character/location references, so results stay on-model instead of varying wildly
  • Cinematic: fixed broken styling after a page refresh on a film (cinematic styles are now injected on every entry, including deep-link restore)
v2.49.3 Aug 9, 2026
  • Cinematic: keyframe Edit now passes the shot's locked character/location references, so edits keep characters on-model instead of redrawing a new person
v2.49.2 Aug 9, 2026
  • Cinematic: refreshing now keeps you on the current film (deep-linked #film/N) instead of jumping to New Campaign
  • Cinematic: name a film when creating it, and rename any film from the list or the film header
v2.49.1 Aug 9, 2026
  • Cinematic refinements: storyboard cost breakdown (per-scene + total), per-asset reference images with context notes, keyframe storyboard context + click-to-enlarge
  • Keyframes: per-shot reference visibility/editing, fixed Edit (image cache), throttled generation to avoid provider rate limits, recover stuck shots, clearer error messages
  • Assets: "Lock all ready" + explicit gate status for continuing to storyboard
v2.49.0 Aug 9, 2026
  • Cinematic Video (admin): turn a 5–10 min script into a fully assembled short film
  • Staged pipeline: script breakdown → locked asset library → storyboard → keyframes → animatic → shot videos → final cut
  • Consistency: multi-reference keyframes + per-character locked ElevenLabs voices + shot-to-shot continuity
  • Per-scene video model suggestion (cheap for B-roll, premium for close-ups), timed animatic gate before paid video, auto-stitched final with music & captions
  • Optionally seed the asset library with your own character/location photos
v2.48.1 Jul 21, 2026
  • Voiceover captions: auto-generated text captions burned into voiceover videos via fal.ai
  • Full caption styling: font (5 options), color (6 presets), size, position, alignment, outline, text case
  • Words per caption control: shorter phrases prevent text from overflowing the video edges
v2.46.1 Jul 11, 2026
  • Post edit: AI Rewrite, Save, and Cancel all moved above textarea — no scrolling needed
  • Carousel: font family selector (Sans-serif, Serif, Monospace, Display) and font size slider (32–72px)
v2.45.0 Jul 11, 2026
  • Fix: "Mute original video audio" now works — uses MMAudio V2's mask_away_clip API parameter
  • Instagram vertical crop: 9:16 images are pre-cropped to 4:5 from the top, preserving headings
  • Fix: Edit & Retry from History now correctly carries over source material
  • Title style dropdown: 7 style options (hook, clickbait, question, etc.) for image titles
v2.44.0 Jul 8, 2026
  • Add background music to videos — 6 mood presets (Upbeat, Chill, Corporate, Dramatic, Fun, Ambient) powered by fal.ai MMAudio V2
  • Music modal with editable prompt, per-mood preset text
  • Remove music option to revert to silent version
  • Publishing (GHL) automatically uses music version when available
v2.43.2 Jul 7, 2026
  • Multi-model video — 5 video models via fal.ai: Wan 2.6 (20 cr), Hailuo 02 (27), Kling 2.5 Turbo (35), Kling 3.0 Pro (56), Veo 3.1 (100)
  • Async video generation — queue-based pattern replaces old blocking approach; videos now reliably complete
  • Model selection modal with descriptions and credit costs
  • Video progress state shown in Transform dropdown
v2.43.1 Jul 6, 2026
  • Selfie Mode — upload your own photos to a selfie library, then use them as post images
  • AI selfie enhancement — Gemini enhances each selfie to match the post topic and adds stylized text overlay
  • New Selfies tab for managing your photo library
v2.42.2 Jul 1, 2026
  • LinkedIn carousel fix — upgraded API version (was sunset), added document processing wait before publishing, fixed silent failures when PDF retrieval fails
v2.42 Jun 30, 2026
  • Carousel posts — convert any single-image social post into a multi-slide carousel with blurred cover background + GPT-generated text per slide
  • GHL carousel scheduling: multi-image posts for Instagram & Facebook
  • LinkedIn carousel scheduling: PDF document upload for swipeable carousel experience
  • Improved cron error handling: publish failures are now always logged even when D1 times out
v2.40 Jun 11, 2026
  • Client approval — send a shareable link to clients so they can review, approve, or reject individual posts without logging in
  • Approval badges on post cards reflect client decisions in real time
v2.39 Jun 12, 2026
  • GHL calendar integration — scheduled GoHighLevel posts now appear in the calendar view with per-channel error reporting
v2.38 Jun 11, 2026
  • Mobile-friendly — responsive layout for all screens: hamburger nav, stacked forms, single-column grids, larger touch targets
v2.37 Jun 11, 2026
  • Onboarding wizard — new users are guided through creating their first social posts step by step, one field per screen with explanations
  • Parallel social post generation — campaign social posts now generate in parallel with images instead of waiting, so they always complete even if images fail
v2.35 May 25, 2026
  • Logo compression — logos are now automatically resized and compressed before upload (max 800px, JPEG). A 2 MB logo becomes ~50-100 KB, dramatically improving image generation reliability
  • Timeout tuning — first-attempt timeout for multimodal requests increased from 25s to 45s
  • Concurrency reduction — when a reference image is attached, batch size drops from 3 to 2 concurrent requests to avoid overloading the AI
  • IDOR hardening — all API endpoints now enforce resource ownership checks; scheduling endpoints verify post ownership
  • Image gen diagnostics — every failed generation attempt logs prompt size, ref image size, model, timeout, and error type to the error log
  • Image type diversity — new imageType dimension (graphic, photo, meme, illustrated, cinematic, mockup, infographic, collage) for visually distinct ads
  • Randomized variations — ad specs now shuffle all creative dimensions per campaign instead of deterministic assignment
  • Server-side logo cap — oversized logos loaded from R2 (old uploads) are skipped to prevent worker timeouts during regeneration
  • Crash-safe background tasks — top-level try/catch around all waitUntil bodies to ensure errors are always logged
v2.34.1 May 22, 2026
  • GHL calendar debug — new /api/ghl/debug-posts endpoint returns raw GHL API response for diagnosing why scheduled posts don't appear in the calendar
  • Conflict checking — single-post scheduling on GHL, Meta, and LinkedIn now warns if another post is already scheduled at the same time
v2.34 May 21, 2026
  • Visual diversity overhaul — ad images are now dramatically more varied. Expanded from 5 layouts to 10, 5 styles to 8, 4 backgrounds to 8, and 10 palettes to 14
  • New layouts — diagonal, asymmetric, poster, layered, typographic, floating — each producing distinct visual compositions
  • New styles — retro (vintage/halftone), luxe (metallic/premium), handcrafted (brush strokes/organic)
  • New backgrounds — texture (marble/metal/fabric), 3D (rendered shapes with lighting), duotone, bokeh (cinematic blur)
  • New palettes — pastel (lavender/pink), earth (terracotta/sand), neon (electric accents on black), cream (warm ivory/copper)
  • Creative prompts — Gemini now gets creative direction instead of rigid blueprints, producing more unique and eye-catching images
v2.33 May 21, 2026
  • HeyGen video scheduling — posts with HeyGen videos can now be scheduled to Instagram (as Reels), GHL, and Facebook. Previously, posts without images but with HeyGen videos were rejected at scheduling time
  • Media fallback — GHL and Instagram scheduling now automatically falls back to HeyGen video when no image exists, instead of failing with "no image available"
  • Instagram Reels — HeyGen videos are published as Instagram Reels via Meta's Content Publishing API
v2.32 May 20, 2026
  • Anti-repetition — each post now sees the actual text of prior posts in the series, so the AI avoids reusing sentences, phrases, and examples across posts
  • Max characters setting — optional field to cap post length (e.g. 800 for shorter posts). Stored per session and used on regeneration too
  • GHL scheduling fix — scheduling now fails with a clear error if the image hasn't been generated yet, instead of silently scheduling as text-only
v2.31 May 19, 2026
  • Calendar fix — calendar now shows all posts (pending, published, failed) instead of only pending, so past months are no longer empty
  • Calendar error logging — all 4 data channels (IG, Facebook, GHL, LinkedIn) now log errors instead of silently failing
  • Status badges — calendar events show colored status dots: green for published, red for failed, with reduced opacity on published posts
  • Single-image regen resilience — 90s timeout per attempt (up from 25–60s), 4 attempts (up from 3), stays synchronous so the Worker gives Gemini the full request lifetime
v2.30 May 13, 2026
  • Image generation resilience — increased timeout (45s → 60s), 3s retry delay, reduced concurrency (3 → 2) to prevent Gemini overload cascades
  • Logo preserved on retry — supporting image now included on fallback attempt 2 (Flash + logo), only dropped as last resort on attempt 3
  • HeyGen error clarity — failure messages now show the actual reason (e.g. insufficient API credits) instead of generic errors
  • HeyGen import fix — importing portal-generated videos by ID now falls back to v1 API when v2 returns 404
v2.28.0 May 12, 2026
  • Paste Text source option — replaced "None" with a textarea to paste articles, notes, or transcripts directly as source material
  • No-images mode — new "No images — text only" option in the image model selector, skips image generation entirely for text-only or video-focused workflows
  • Features & Changelog page — this page! Accessible via the info icon in the nav bar
v2.27.12 May 2026
  • LinkedIn integration — OAuth connection, single & bulk post scheduling, calendar view, cron-based publishing with token refresh
  • HeyGen integration — AI-generated talking-head videos from post text, avatar & voice selection, script generation, R2 storage
  • Background image generation — campaigns and posts return instantly while images render in the background with live polling
  • Gemini resilience — 3-attempt retry with timeout, automatic Pro → Flash model fallback, simplified prompt fallback
  • Deep links — URL hash routing for sessions and campaigns (#session/N, #campaign/N) survives page refresh
  • Campaign clone improvements — logo and ref_context carry over when cloning
  • Error context logging — structured context data on all error log entries for easier debugging
v2.9.0 May 2026
  • Initial release — ChannelCopy with campaign creation, social post pipeline, GHL & Meta scheduling, calendar view, admin panel, credit system

Selfie Library

Upload photos to use in Selfie Mode when creating social posts.

JPEG, PNG, or WebP — max 5 MB each

Settings

Manage your integrations and connected accounts.

Integrations

Generating your ads…

Claude AI is crafting unique copy for each variation

Starting…