A greeting typed over a quiet morning shot can look pasted on, so the idea here is on-screen text made from something already in the picture, like steam or sunlight. The loop below is a 5-second opener made that way: steam off a cup of tea gathers into the words “Good morning”. I didn't ask a model for that shot. I asked for the opposite, the words already made of steam coming apart, and played that clip backwards in CapCut's editor. When I did ask the video models to form the words, three times across two models, each one drew a title instead: crisp, solid white, and misspelled in two of the three. That's the pasted-on look again.
Reversed in the editor from a clip of the words breaking apart. The first letter shapes show at about 2.2 seconds, and both words read correctly from 2.75 seconds to the end.
Steam letters and title letters, measured
Two things separate lettering made of steam from a title laid over the picture. Steam has soft edges, and you can see the wall through it. A title has hard edges and is solid white. I measured both eight times a second through every clip. I also ran a text-recognition engine on the same frames, which tells me whether the words are there and spelled right.
Edge softness is a number where higher means softer. To calibrate it I drew my own letters with a known amount of blur: half a pixel of blur reads between 1.2 and 1.6, and three pixels or more reads above 4. The steam letters in the still this all started from measure 3.1. The titles in the text-only clips measure between 1.0 and 1.7. Stroke brightness is on the usual 0-to-255 scale. The steam letters sit around 185, with the dark wall showing through them. The titles sit above 245, which is solid white.
The scope, before the results: one scene, a cup of tea in front of a dark wall or a bright window, in 5-second clips at 720p, across 17 generations. The 2.0 Mini results are one run for steam and one for light, so they show this is possible at these settings, not how often it works. Seedance 2.0 and 1.5 Pro weren't tried. The text reader is strict: a person glancing at “Good mornng” may read it as correct, so treat its misses as spelling problems to check by eye.
What the video models drew when asked to form the words
All three asked for steam rising from a cup of tea and gathering into “Good morning”.
Asked to form the words, each model drew type. Edge softness for these letters: 1.0 to 1.8. The close-up shows why the text reader got “mornng”.
Describing the material didn't help. Two of the three prompts said in detail that the letters were thin, translucent steam, and both came back as type. In these runs, whenever a video model had to invent the letters, it drew a font.
The steam look comes from the still
The image generator was the part that could draw steam lettering. I made four stills with the AI image generator (Image mode, Seedream 4.5, 16:9), then a fifth to test lettering style. The first four drew the words as soft, glowing vapor, and the text reader read both words correctly on three of them. On the fourth, one of the two with feathers (below), it misread “Good”. Some of my words came back as objects:
The background matters more than any of that. Steam is visible because it's brighter than what's behind it. On a dark wall, the letters were 49 and 57 lightness units (L*, a scale from black at 0 to white at 100) brighter than the wall behind them. In front of a bright window they were 14 and 18 brighter, even though the letters there were drawn close to pure white (93 L*, against about 64 on the dark wall). To separate the physics from the generator, I added my own letters at 30% opacity to both backgrounds. They stood 32 units above the dark wall and half a unit above the window, which is effectively invisible. The generator's numbers come from two stills per background. The planted test shows which way any faint white vapor goes.
Top: the same prompt with a dark wall and with a bright window behind the cup. Bottom: two wording traps.
Making steam text move without losing the look
I made four clips from the dark-wall still with the AI video generator: select the still's card on the canvas, choose Image to video, and describe the motion. All four started from the same frame, so the differences come from the model and the wording. Three ran on Seedance 1.0 mini and one on Seedance 2.0 Mini. The costs are in the table further down.
Two of the three 1.0 mini clips turned the steam letters into title-like type within half a second. The 2.0 Mini clip kept them soft until they broke up.
Two things made the difference. The first is the wording. When the prompt described only what the letters do (hold, then drift apart), 1.0 mini sharpened them into type within half a second. Describing what the letters are made of for the whole clip (“soft, blurred, semi-transparent edges that the dark wall shows through”) kept them soft in one of the two 1.0 mini runs. The second is the model. The 2.0 Mini clip kept the letters soft, dimmed them as they loosened (stroke brightness from 184 to 94 by 2.5 seconds), and broke them into curls of steam. Nothing was left for the text reader from 3.0 seconds on.
Side effects in two 1.0 mini clips. Top: the cup moved 184 pixels down the frame (26% of its height) in three seconds, although the prompt said the framing stays the same. Bottom: half a second after the letters faded, a caption appeared that nothing in the prompt asked for.
Playing it backwards in the editor
In CapCut's online editor, upload the clip, click it on the timeline, and click Reverse on the timeline toolbar, next to Split, Delete, Crop, Flip horizontal and Freeze. I checked what came out. All 121 frames of the original are there once each, in reverse order. The exported video starts at 0.08 seconds rather than zero, a two-frame offset that doesn't affect the frames themselves. The 2.0 Mini clip came with a sound track, and Reverse ran the sound backwards too.
Reverse sits on the timeline toolbar once a clip is selected. The clip's thumbnails now end on the words.
To export, click Export, then Download. The export settings here opened at 1080p and 30 fps. The generated clip is 720p at 24 fps, so I set 720p and 24 fps to avoid resizing it or converting its frame rate. Choosing the frame rate switched the resolution back to 1080p, so set the frame rate first and check the resolution again before you export.
The reversed clip ends on the clip's first frame, which is the model's copy of your still, so the words finish in the lettering you approved. Its letters measure 3.1 on edge softness, the same as the still. The first second of the reversed clip is the last second the model generated, and that's where the unrequested caption appeared in one of my 1.0 mini clips. Watch that part before you post.
Light instead of steam
Sunlight works the same way with one extra trap. My first light still asked for “the wall's cracks and rough plaster texture” to show inside the bright letters. The insides of the o's and the d came out as holes in the plaster. When Seedance 1.0 mini animated that still so the light faded, the letters stayed behind as a gray imprint, still readable in the last frame. The version that worked says the letters are “made only of warm sunlight falling on the plain wall”.
From that clean still I asked both models for the same thing: a cloud drifts over the sun and the sunlit words fade. Seedance 1.0 mini faded the light but not the letters. By 3.0 seconds the patch of sunlight on the wall was gone, and the letters still stood 22 L* above the wall and read correctly until 4.4 seconds. Reversed, that clip would light up the letters before any sunlight reached the wall. On Seedance 2.0 Mini the letters melted into a broad patch of light within about two seconds, and then the patch faded. Reversed, the light arrives first and then gathers into the words.
The 2.0 Mini light clip, reversed. Both words read correctly from 3.04 seconds.
Top: the same moment in the two clips from the clean light still. On 1.0 mini the letters outlived the light; on 2.0 Mini the letters went first and the light followed. Bottom: the textured light still and the last frame of its fade.
The version that worked, step by step
1. The still. In the composer, choose Image mode, Seedream 4.5, 16:9. Put something dark behind where the words will be, and leave out any lettering style. This is the prompt as I sent it:
A close shot of a white ceramic cup of hot tea on a wooden table in front of a dark charcoal wall, lit by soft morning light from a window at the side. The steam rising from the tea curls into the words "Good morning" in the air above the cup. The letters are made of the steam itself: thin, translucent white vapor with soft, blurred edges, and the dark wall is visible through them.
2. The clip. On the still's card, choose Image to video. Set Seedance 2.0 Mini, 16:9, 5 seconds, and describe the letters breaking up while staying steam:
The steam letters start to come apart right away. The steam that forms them loosens and spreads out, letter by letter, from left to right, until by the last second no letters are left and only plain steam rises from the cup. While they come apart, the letters stay made of steam: soft, blurred, semi-transparent edges that the dark wall shows through, never solid white or sharp. The cup, the table and the wall do not move, and the framing stays the same.
3. The reverse. In the editor: upload the clip, select it, click Reverse, and export at the clip's own 720p and 24 fps. For light, swap in the light still's wording from the section above and describe a cloud passing over the sun.
What each step cost, from the line the composer printed in the chat when I sent it:
These are the figures for these configurations on that date. Other durations, resolutions and models are charged differently. At these settings the working version is one still and one 2.0 Mini clip, 26 credits, and each new try at the clip is another 25. The composer showed the cost as a line in the chat (“Generating 1 item will consume…”) right after I pressed send, and nothing asked me to confirm it first. In my runs the charge matched whichever model was selected at that moment, so check the model in the settings before you send.
Taking letters apart is the easier job
In these tests the models did better taking letters apart than putting them together. Asked to build words out of steam, they drew type. Given steam lettering that already existed, 2.0 Mini broke it up the way steam breaks up. So the image generator draws the letters, and the video model does the part it did better here. Then Reverse turns the break-up into the arrival.
Configuration and cost. Every setting and cost above was read from the composer on 2026-09-24. The credits for each generation were read from the line the composer printed after each send. In total the tests used 278 credits. That includes 185 for one Seedance 2.5 clip that was meant to run on 1.0 mini: my script clicked the model name in an earlier chat message instead of the menu option. Its result is used in the first table because it's a valid test of that model. It also includes 1 credit for a still made from a suggestion button my script clicked by mistake, which isn't used here. Without those two, the tests came to 92 credits. Editor work used no credits.
Files. Stills 2560×1440. Seedance 1.0 mini clips are 1248×704 at 24 fps with no sound. Seedance 2.0 Mini and 2.5 clips are 1280×720 at 24 fps with a sound track. Every file I got back, stills and clips, has a small “Ai” mark in its top-left corner, and the mark is still there after Reverse and export. Prompt text is quoted as sent. The GIFs in this article are 560 pixels wide at 8 frames a second. The timings in the text come from the full-size clips.
How the letters were measured. Edge softness: find the bright strokes, take the pixels where brightness crosses halfway between stroke and background, and compare the brightness gradient there with the stroke's contrast. The result is expressed as an equivalent blur width. Tested on letters I drew with known blur (0.5 to 6 pixels) at two opacities, with and without real steam in the same box, the reading rose steadily with the blur each time. Contrast: stroke lightness minus background lightness in the text area. Tested on letters planted at known opacity, it was within 1.5 L* on the dark wall at every opacity. On the bright window it was only accurate for fully opaque letters (11.3 against 11.9 planted). That's why the window figures come from the generator's own near-white letters. Stroke boxes were drawn back onto every still and checked. Camera movement: the cup's rim tracked by template matching, reliable until the rim left the frame after 3 seconds. Text reading: Apple's Vision text recognizer, run on every third frame and on every frame of the reversed clips.
Thrown away or redone. My first edge-softness measure failed its own test. It read sharp planted letters as softer than blurred ones, because soft steam edges contributed more pixels than sharp letter edges. It was replaced by the version above, which counts each edge once per unit of length. The contrast measure was also unreliable on the bright window when the letters barely separated from it, so no figure here depends on that case. One light-clip contrast series was re-run after the text box accidentally took in the “Ai” mark. In the chart, each line ends at the last frame where both words were read correctly, because the frame after that is dominated by loose steam and would read as very soft.
Reverse was checked frame by frame against the original: the best-matching original frame averaged 42 to 43 dB across the two clips, and the matches ran in strictly decreasing order. The sound's correlation with the original played backwards was 0.54, against 0.14 with the original played forwards.