The Build
The 22 percent acceptance rate is not a number to be proud of. 78 percent of everything that was built got rejected before a single buyer had the chance to see it. The easy response to that number is to keep submitting anyway — to treat rejection as a volume problem rather than a quality problem, to assume that more submissions will naturally produce more acceptances, to wait for the law of large numbers to do the work that strategy should do. The tempting response is to blame the platform — to decide that Adobe's acceptance criteria are arbitrary, that the rejection codes are too vague to act on, that the system is designed to be opaque. Neither of those responses is useful. The rejection data is data. 78 percent rejection is a signal that something in the process is wrong. The decision was to investigate instead of rationalize. Systematic iteration means treating the output data as diagnostic information and working backward to find the variable that is producing the bad result. The variable was not obvious from looking at the rejection codes alone. Finding it required consulting the AI systems that had been involved in building the generation workflow from the start.
Gemini and Grok were consulted simultaneously with the same question. The rejection data from Batch 01 went to both. The question was the same to both: given this rejection pattern across these niches, what is the variable most likely to explain the distribution of rejection codes? Both systems pointed to the model. Not the prompt. The model. That answer is counterintuitive in a way that deserves to be explained. The dominant conversation in AI-generated content is about prompt engineering. The assumption embedded in most of that conversation is that the model is a fixed input and the prompt is the variable that determines output quality. That assumption is wrong in a specific and important way. Different generation models are trained on different datasets, which means they produce output that reflects the statistical distribution of their training data. A model trained heavily on stock photography from the 2010s will produce images that look like stock photography from the 2010s — which means it will produce images that look like what Adobe's library already has too much of. A model trained on a more diverse or more recent dataset will produce images that are more likely to fill gaps in the existing library rather than duplicate what is already there. When the rejection code is commercial viability — too similar to existing library content — the prompt is not the problem. The model's training distribution is the problem. Changing the prompt on a model that produces over-represented content will not solve the problem. Changing the model will.
The model-per-niche framework came out of that consultation. The logic is straightforward even though the implementation requires testing. Each niche in the submission stack gets assigned the model that produces the highest acceptance rate for that specific niche, based on empirical testing rather than assumption. The mapping is built by running small test batches — ten to fifteen images per model per niche — and comparing acceptance rates across models for the same niche. The model with the highest acceptance rate for that niche becomes the primary model for that niche going forward. The mapping is not static. It gets updated as Adobe's library composition changes, as the generation models update their training, and as new niches get added to the stack. This is not a solved problem. The acceptance rate is improving but the experiment is ongoing. The agriculture niche is running at a higher acceptance rate on Grok Imagine than it was on the first batch, but the composition rejection rate in that niche is still higher than the target. The neurodiversity niche, which runs on Adobe Firefly specifically because Firefly's IP indemnification matters for that category, is running at a different acceptance pattern than the other niches because Firefly is a structurally different tool — it is not API-accessible in the same way, which affects the batch workflow. Every adjustment to the model-per-niche mapping requires a new test batch, a waiting period for the acceptance results, and another round of analysis before the next adjustment. The willingness to run that cycle repeatedly without skipping steps is what separates iterating from guessing.
The pivot from images to video did not come from frustration with the image acceptance rate. It came from looking at the earnings differential and deciding that the asset class with dramatically higher per-download earnings was worth the additional production complexity. Images on Adobe Stock earn cents per download in most niches. The UDL sale was $0.47. Video clips on Adobe Stock earn dollars per download — estimates based on contributor community data put the range at five to ten times the image rate, sometimes more for specialized content in under-served niches. The video market on stock platforms is significantly less saturated than the image market. The barrier to entry is higher — AI video generation is more expensive per clip than AI image generation, the technical rejection criteria are stricter, and the review timeline is longer. But the ROI comparison at equivalent acceptance rates is not close. A 20 percent acceptance rate on video clips earning $5 per download produces dramatically more revenue than a 22 percent acceptance rate on images earning $0.47 per download, even accounting for the higher production cost per clip. The workflow for video builds on the existing image workflow in a way that compounds the work already done. The accepted images in the stock library do not just sit there earning download income. They become the reference frames for video generation. The image goes into the fal.ai Kling V3 Pro pipeline as the first frame. The video generation model reads the accepted image and produces a clip that matches its composition, lighting, color palette, and subject matter. The accepted image tells the video model exactly what to produce without requiring a new round of prompt iteration. The work that produced the accepted image does double duty — it earns as an image and it seeds the video generation. The asset library compounds in both dimensions simultaneously.
Eight AI video clips were submitted to Adobe Stock from the agriculture niche as Batch 01 for video. The clips were generated using the fal.ai Kling V3 Pro image-to-video pipeline, with accepted agriculture images as the first frames. The cost per clip through the fal.ai API is $0.896 — meaningfully more expensive than $0.07 per image, but the per-download earnings differential justifies the cost differential at almost any reasonable acceptance rate. Eight clips at $0.896 is $7.17 for the batch. If two of those eight clips are accepted — a 25 percent acceptance rate — and each accepted clip earns $5 per download at one download per month, the monthly earning from those two clips is $10. The $7.17 batch cost is recovered in the first month. At a 50 percent acceptance rate — four accepted clips — the monthly earning at the same conservative assumptions is $20, recovered in the first two weeks. Adobe's review process for video takes three to seven days. The results were pending at the time of writing. The data will be in the next log.
What the data tells you is more reliable than what the intuition tells you, and the willingness to act on what the data tells you — even when it requires discarding a workflow you spent time building, even when it means starting a test cycle over from the beginning — is the skill that makes iterative businesses work. You do not guess what the acceptance rate variable is. You test. You measure the result. You identify the variable that changed. You switch the variable and test again. Every iteration of that cycle gets the asset library closer to the point where the math produces meaningful income. The model switch is one iteration of that cycle. The pivot to video is another iteration. The model-per-niche mapping is a third. None of these are permanent solutions. All of them are current best answers based on current data, subject to revision as new data arrives. That willingness to keep revising is what connects May 4 2026 — one image, $0.47, the proof — to May 31 2027 and the gap that needs to close. Every iteration of the cycle moves the asset library one step closer to the scale where the passive income from the stock library becomes a meaningful contribution to closing that gap. The cycle continues. Follow along. This is the build log.
The Tools
| Tool | What I Used It For | Link |
|---|---|---|
| Grok Imagine (xAI) | Primary image model -- multiple niches | x.ai |
| Adobe Firefly | Neurodiversity niche -- IP indemnified | firefly.adobe.com |
| fal.ai Kling V3 Pro | Image to video generation pipeline | fal.ai |
| Adobe Stock | Stock marketplace -- contributor | stock.adobe.com |
| Gemini (Google) | AI consultant -- model strategy | gemini.google.com |
| ElevenLabs | AI voice synthesis (affiliate) | Try free 30 days |
The Math
| Item | Cost | Notes |
|---|---|---|
| Initial acceptance rate | 22% | Batch 01 -- wrong model for niches |
| Post-switch acceptance rate | Improving | Still learning -- ongoing experiment |
| Image earnings per download | ~$0.47 | UDL niche benchmark |
| Video earnings per download | ~$5-10 | Estimated 10x image rate |
| Video clips submitted Batch 01 | 8 | AG niche -- fal.ai Kling V3 Pro |
| Cost per video clip | $0.896 | fal.ai Kling V3 Pro |
| Total video batch cost | $7.17 | 8 clips x $0.896 |
| Video results pending | TBD | Adobe review 3-7 days |