Methodology: how a photo becomes a tribute video
By Shangyi Duan · Last verified 2026-11-02 · Sources: src/worker.js, build.py, content.py · Report an error
This page shows what happens to a photo between the upload and the finished MP4, which files hold the numbers the site publishes, and what the method cannot do. Everything below comes from the site’s own code — src/worker.js, build.py and content.py — not from an outside study.
Sources
The site quotes no outside publication for facts about pet loss or about our own product, so the “Sources” line on each page names the repo file that holds the value shown. This table is the complete list, including the one manual step. No row is an outside dataset.
| Source | URL | Used for | Last checked |
|---|---|---|---|
| Scene prompts, safety check and preview caps | src/worker.js (repo file, not a public URL) | The four scene prompts, the moderation order, 3 previews per day per visitor and 150 per day site-wide | 2026-11-02 |
| Page copy, FAQs and comparison rows | content.py (repo file) | Every paragraph, FAQ answer and the seven competitor rows | 2026-11-02 |
| Prices, credit packs and sitemap | build.py (repo file) | $9.99, $19.99 and $39.99 packs; 1 credit standard, 2 HD; the 28 URLs in the sitemap | 2026-11-02 |
| Launch and payment record | REPORT.md (repo file) | Dodo product IDs, the webhook path and the launch-day test results | 2026-11-02 |
| Other tools’ prices | each listed tool’s own pricing page, read by hand | The comparison page; read in October 2026 and not automated | October 2026 (read by hand) |
How the video is made
- Resize in the browser.
src/app.jsshrinks the chosen photo to 1280 px on its long edge and sends it as a JPEG data URL, so the original file never leaves the visitor’s device at full size. - Validate the request.
/api/previewaccepts only the four scene keys, checks that the image is JPEG, PNG or WebP and under the stated size limit, and applies the preview caps: 3 per visitor per day and 150 per day for the whole site, for visitors without credits. - Check the photo before anything is generated. Two models run together: an NSFW classifier (
fal-ai/imageutils/nsfw) and a vision classifier (openrouter/router/vision, running Gemini 2.5 Flash) that returns a JSON verdict on people, minors, gore, hate symbols and whether an animal is visible at all. Each is retried up to three times; if either check cannot run, the request fails with a 503 and nothing is generated — the check never fails open. - Paint the still. The scene’s
stillprompt goes tofal-ai/nano-banana/edittogether with the photo. The prompt asks for the same breed, coat colours, markings and face, and for no people and no text. - Choose the quality. Standard is 720p and costs 1 credit; HD is 1080p and costs 2. Both are 10 seconds with generated music.
- Queue the movement.
/api/renderdeducts the credits, then sends the approved still and the scene’smotionandaudioprompts toalibaba/wan-3.0/image-to-video. If the queue call itself fails, the credits go back automatically. - Watch the queue. The page polls
/api/render/:id. A completed job returns the MP4 URL; an error, or more than 20 minutes without a result, marks the job failed and refunds the credits. - Download.
/api/download/:idstreams the finished file asrainbow-paw-memorial.mp4. - Expiry. The preview job record lives 3 days and the render record 7 days, which is why the site tells people to download within a week.
One step is manual: the prices in the comparison table were read from each tool’s public page by hand in October 2026. Nothing else is typed page by page — the pages, the sitemap and llms.txt are generated by build.py on every build.
Known limitations
- It is an interpretation, not a recording. The likeness comes from one photo, so a wiry coat can come out smoother, an unusual marking can drift, and a small, dark or blurry face gives a looser result.
- The preview is a still, not a video. Moving clips cost credits, and previews stop at 3 per visitor per day and 150 for the whole site per day; after that they pause until the next day.
- Comparison prices are a snapshot. The other tools’ prices were read in October 2026 and can change without notice, so check their page before buying. We make Rainbow Paw, so our own row is not neutral.