{"course":{"slug":"ai-video","title":"Video with AI","url":"https://addaly.com/learn/ai-video","level":"intermediate","track":"create"},"lesson":{"slug":"the-frame-library","title":"Every still you keep is a part you do not have to make again","url":"https://addaly.com/learn/ai-video/the-frame-library","position":19,"of":66,"minutes":8,"answer":"A still with its prompt, seed, model version and provenance stored beside it is a reusable part, and a project without that record cannot be revised six weeks later: it can only be redone.","keyIdea":"A still with its prompt, seed, model version and provenance stored beside it is a reusable part, and a project without that record cannot be revised six weeks later: it can only be redone."},"body":{"format":"markdown","text":"## The phone call that makes this matter\n\nA project delivers. Six weeks pass. The client asks for one change to shot nine: the jacket should be navy, everything else stays.\n\nIf you kept the still, the prompt, the seed and the model version, that is twenty minutes: open the still, recolour the jacket, regenerate the clip, drop it into the timeline.\n\nIf you did not, you are rebuilding shot nine from nothing, in a world where the model has been updated, and you will not match the eight shots around it. That is not a revision, it is a reshoot, and you cannot bill for it because you already delivered.\n\n> Figure: One change to shot nine, six weeks later. Timeline: Day 1, The still for shot nine is generated, repaired by hand, and saved as a PNG with a text file beside it: prompt, seed, model version, every setting.; Day 2, Three takes are generated. The chosen one is kept at full quality with its own settings file, and the two rejects go into the rejects folder rather than the bin.; Day 14, The piece is delivered, and the whole project folder is copied somewhere else. One copy in one place is not a backup.; Week 7, The client asks for one change. The jacket in shot nine should be navy, and everything else stays as it is.; Twenty minutes later, The still is reopened, the jacket recoloured, the clip regenerated from the same seed on the same model version, and dropped into the timeline.; The other version, With no record, shot nine is rebuilt from nothing against a model that has been updated since, and it will not match the eight shots around it.. The sidecar costs two seconds at the moment the decision is made and cannot be reconstructed a month afterwards. That is the entire difference between a revision you can bill for and a rebuild you cannot.\n\nEverything below exists to prevent that phone call from being expensive.\n\n## What to store next to every frame\n\nA still is not a file. It is a file plus a sidecar. For each frame that gets used:\n\n- The image at full resolution, in a lossless format. PNG or WebP, not a re-compressed JPEG.\n- The exact prompt text, copied not retyped.\n- The negative prompt, if there was one.\n- The model name **and its version string**.\n- The seed and every numeric setting.\n- The source: generated, photographed, composited, or repaired from another frame.\n- If it was repaired or composited, the layered file as well.\n\nA plain `.txt` or `.json` file with the same name as the image is enough. Do not put this in your head, in a chat history, or in a tool's own gallery: tools lose histories, accounts get closed, and chat scrollback is not a filing system.\n\n## A folder layout that survives\n\nNothing clever. Something like:\n\n```\nproject-name/\n  shots.md                 # the shot list, one line per shot\n  frames/\n    s09_first_v3.png\n    s09_first_v3.txt        # prompt, seed, model, settings\n    s09_first_v3.psd        # layered, if repaired\n    s09_last_v1.png\n    s09_last_v1.txt\n  clips/\n    s09_take4.mp4\n    s09_take4.txt           # which frame, which model, which settings\n  audio/\n  edit/\n```\n\nThe naming convention matters more than the structure: **shot number, role, version.** `s09_first_v3` sorts correctly, reads unambiguously, and tells you at a glance that there were two earlier attempts.\n\nAvoid `final`, `final2`, `FINAL_use_this`. Everyone has lived through that and nobody has ever benefited from it.\n\n## Keep the rejects\n\nThis is the part people skip and later regret.\n\nA rejected still is not waste. It is a parts bin. The generation with the ruined composition but the perfect hand is where tomorrow's hand comes from. The one with the wrong light but the right face is a reference image for the next attempt. Because they came from the same model with the same prompt family, the pieces actually fit: same colour response, same grain, same rendering of skin.\n\nKeep them in `frames/rejects/`. Delete the whole folder when the project is signed off, if you must, and not before.\n\n## Reuse across shots, and across projects\n\nWithin a project, the same still often serves several shots: a wide used once as a first frame and once, cropped, as the end frame of a push-in. A background plate reused with a different subject composited in. An establishing frame reversed for a matching shot from the other direction.\n\nAcross projects, a small personal library of backgrounds, textures, skies and plates accumulates and is worth real time. Name them by content rather than by the project they came from, or you will never find them again.\n\n## The provenance question, which is not administrative\n\nThere is a second reason to record the source of every frame, and it is not about convenience.\n\nIf a client or a platform later asks what in this video was generated and what was filmed, the honest answer has to come from somewhere. A frame library where every item says `generated` or `photographed` or `composited` answers that question in a minute. A folder of untitled PNGs does not.\n\nLabelling obligations and disclosure rules are dealt with properly later in the course. The record that makes compliance possible gets built here, during production, because it cannot be reconstructed afterwards.\n\n## The free path\n\nAll of this is folders and text files. No software, no subscription, no database. Version control is optional and generally overkill for binary media, though a plain copy of the project folder at delivery, stored somewhere else, has saved more projects than any tool.\n\n---\n\nToday: take the last shot you generated and write its sidecar file from memory. Whatever you could not remember is the field that goes in your template."},"check":{"question":"Why is storing the model's version string alongside a still more than administrative tidiness?","options":[{"text":"Version strings are required by most platforms' synthetic-media disclosure rules, which ask for the specific system used.","correct":false,"tempting":"Overstates current disclosure requirements, which generally ask whether content is synthetic rather than which version produced it."},{"text":"Different versions price differently, so the record is needed to reconcile a project's costs afterwards.","correct":false,"tempting":"A real bookkeeping use, but billing records already carry it and it would not affect whether a revision matches."},{"text":"Hosted providers update models silently, so a seed and prompt that reproduced a shot on one version will not reproduce it on the next.","correct":true},{"text":"The version determines which autoencoder was used, and mixing frames encoded by different autoencoders in one timeline produces inconsistent grain and sharpness.","correct":false,"tempting":"Describes a plausible mismatch, but the decode has already happened: the delivered frames carry whatever texture they carry regardless of what you record."}]},"prev":{"slug":"reading-a-still-for-failure","title":"Predicting which second will break","url":"https://addaly.com/learn/ai-video/reading-a-still-for-failure"},"next":{"slug":"where-it-actually-wins","title":"Where this is already the right tool","url":"https://addaly.com/learn/ai-video/where-it-actually-wins"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Every still you keep is a part you do not have to make again', in Video with AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-video/the-frame-library (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Every still you keep is a part you do not have to make again","courseTitle":"Video with AI","module":{"index":2,"slug":"the-first-frame","title":"The first frame, and everything decided in it"},"answer":null,"keyIdea":"A still with its prompt, seed, model version and provenance stored beside it is a reusable part, and a project without that record cannot be revised six weeks later: it can only be redone.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure","figure":{"type":"timeline","title":"One change to shot nine, six weeks later","events":[{"when":"Day 1","what":"The still for shot nine is generated, repaired by hand, and saved as a PNG with a text file beside it: prompt, seed, model version, every setting."},{"when":"Day 2","what":"Three takes are generated. The chosen one is kept at full quality with its own settings file, and the two rejects go into the rejects folder rather than the bin."},{"when":"Day 14","what":"The piece is delivered, and the whole project folder is copied somewhere else. One copy in one place is not a backup."},{"when":"Week 7","what":"The client asks for one change. The jacket in shot nine should be navy, and everything else stays as it is."},{"when":"Twenty minutes later","what":"The still is reopened, the jacket recoloured, the clip regenerated from the same seed on the same model version, and dropped into the timeline."},{"when":"The other version","what":"With no record, shot nine is rebuilt from nothing against a model that has been updated since, and it will not match the eight shots around it."}],"caption":"The sidecar costs two seconds at the moment the decision is made and cannot be reconstructed a month afterwards. That is the entire difference between a revision you can bill for and a rebuild you cannot."},"alt":"Figure: One change to shot nine, six weeks later. Timeline: Day 1, The still for shot nine is generated, repaired by hand, and saved as a PNG with a text file beside it: prompt, seed, model version, every setting.; Day 2, Three takes are generated. The chosen one is kept at full quality with its own settings file, and the two rejects go into the rejects folder rather than the bin.; Day 14, The piece is delivered, and the whole project folder is copied somewhere else. One copy in one place is not a backup.; Week 7, The client asks for one change. The jacket in shot nine should be navy, and everything else stays as it is.; Twenty minutes later, The still is reopened, the jacket recoloured, the clip regenerated from the same seed on the same model version, and dropped into the timeline.; The other version, With no record, shot nine is rebuilt from nothing against a model that has been updated since, and it will not match the eight shots around it.. The sidecar costs two seconds at the moment the decision is made and cannot be reconstructed a month afterwards. That is the entire difference between a revision you can bill for and a rebuild you cannot."}},"blocks":[{"t":"h2","id":"the-phone-call-that-makes-this-matter","runs":[{"text":"The phone call that makes this matter"}]},{"t":"p","runs":[{"text":"A project delivers. Six weeks pass. The client asks for one change to shot nine: the jacket should be navy, everything else stays."}]},{"t":"p","runs":[{"text":"If you kept the still, the prompt, the seed and the model version, that is twenty minutes: open the still, recolour the jacket, regenerate the clip, drop it into the timeline."}]},{"t":"p","runs":[{"text":"If you did not, you are rebuilding shot nine from nothing, in a world where the model has been updated, and you will not match the eight shots around it. That is not a revision, it is a reshoot, and you cannot bill for it because you already delivered."}]},{"t":"p","runs":[{"text":"Everything below exists to prevent that phone call from being expensive."}]},{"t":"h2","id":"what-to-store-next-to-every-frame","runs":[{"text":"What to store next to every frame"}]},{"t":"p","runs":[{"text":"A still is not a file. It is a file plus a sidecar. For each frame that gets used:"}]},{"t":"ul","items":[[{"text":"The image at full resolution, in a lossless format. PNG or WebP, not a re-compressed JPEG."}],[{"text":"The exact prompt text, copied not retyped."}],[{"text":"The negative prompt, if there was one."}],[{"text":"The model name "},{"text":"and its version string","b":true},{"text":"."}],[{"text":"The seed and every numeric setting."}],[{"text":"The source: generated, photographed, composited, or repaired from another frame."}],[{"text":"If it was repaired or composited, the layered file as well."}]]},{"t":"p","runs":[{"text":"A plain "},{"text":".txt","code":true},{"text":" or "},{"text":".json","code":true},{"text":" file with the same name as the image is enough. Do not put this in your head, in a chat history, or in a tool’s own gallery: tools lose histories, accounts get closed, and chat scrollback is not a filing system."}]},{"t":"h2","id":"a-folder-layout-that-survives","runs":[{"text":"A folder layout that survives"}]},{"t":"p","runs":[{"text":"Nothing clever. Something like:"}]},{"t":"code","lang":"","label":"Text","text":"project-name/\n  shots.md                 # the shot list, one line per shot\n  frames/\n    s09_first_v3.png\n    s09_first_v3.txt        # prompt, seed, model, settings\n    s09_first_v3.psd        # layered, if repaired\n    s09_last_v1.png\n    s09_last_v1.txt\n  clips/\n    s09_take4.mp4\n    s09_take4.txt           # which frame, which model, which settings\n  audio/\n  edit/"},{"t":"p","runs":[{"text":"The naming convention matters more than the structure: "},{"text":"shot number, role, version.","b":true},{"text":" "},{"text":"s09_first_v3","code":true},{"text":" sorts correctly, reads unambiguously, and tells you at a glance that there were two earlier attempts."}]},{"t":"p","runs":[{"text":"Avoid "},{"text":"final","code":true},{"text":", "},{"text":"final2","code":true},{"text":", "},{"text":"FINAL_use_this","code":true},{"text":". Everyone has lived through that and nobody has ever benefited from it."}]},{"t":"h2","id":"keep-the-rejects","runs":[{"text":"Keep the rejects"}]},{"t":"p","runs":[{"text":"This is the part people skip and later regret."}]},{"t":"p","runs":[{"text":"A rejected still is not waste. It is a parts bin. The generation with the ruined composition but the perfect hand is where tomorrow’s hand comes from. The one with the wrong light but the right face is a reference image for the next attempt. Because they came from the same model with the same prompt family, the pieces actually fit: same colour response, same grain, same rendering of skin."}]},{"t":"p","runs":[{"text":"Keep them in "},{"text":"frames/rejects/","code":true},{"text":". Delete the whole folder when the project is signed off, if you must, and not before."}]},{"t":"h2","id":"reuse-across-shots-and-across-projects","runs":[{"text":"Reuse across shots, and across projects"}]},{"t":"p","runs":[{"text":"Within a project, the same still often serves several shots: a wide used once as a first frame and once, cropped, as the end frame of a push-in. A background plate reused with a different subject composited in. An establishing frame reversed for a matching shot from the other direction."}]},{"t":"p","runs":[{"text":"Across projects, a small personal library of backgrounds, textures, skies and plates accumulates and is worth real time. Name them by content rather than by the project they came from, or you will never find them again."}]},{"t":"h2","id":"the-provenance-question-which-is-not-administrative","runs":[{"text":"The provenance question, which is not administrative"}]},{"t":"p","runs":[{"text":"There is a second reason to record the source of every frame, and it is not about convenience."}]},{"t":"p","runs":[{"text":"If a client or a platform later asks what in this video was generated and what was filmed, the honest answer has to come from somewhere. A frame library where every item says "},{"text":"generated","code":true},{"text":" or "},{"text":"photographed","code":true},{"text":" or "},{"text":"composited","code":true},{"text":" answers that question in a minute. A folder of untitled PNGs does not."}]},{"t":"p","runs":[{"text":"Labelling obligations and disclosure rules are dealt with properly later in the course. The record that makes compliance possible gets built here, during production, because it cannot be reconstructed afterwards."}]},{"t":"h2","id":"the-free-path","runs":[{"text":"The free path"}],"role":"free"},{"t":"p","runs":[{"text":"All of this is folders and text files. No software, no subscription, no database. Version control is optional and generally overkill for binary media, though a plain copy of the project folder at delivery, stored somewhere else, has saved more projects than any tool."}]},{"t":"rule"},{"t":"p","runs":[{"text":"Today: take the last shot you generated and write its sidecar file from memory. Whatever you could not remember is the field that goes in your template."}]}],"check":{"question":[{"text":"Why is storing the model’s version string alongside a still more than administrative tidiness?"}],"options":[{"text":[{"text":"Version strings are required by most platforms’ synthetic-media disclosure rules, which ask for the specific system used."}],"correct":false,"tempting":[{"text":"Overstates current disclosure requirements, which generally ask whether content is synthetic rather than which version produced it."}]},{"text":[{"text":"Different versions price differently, so the record is needed to reconcile a project’s costs afterwards."}],"correct":false,"tempting":[{"text":"A real bookkeeping use, but billing records already carry it and it would not affect whether a revision matches."}]},{"text":[{"text":"Hosted providers update models silently, so a seed and prompt that reproduced a shot on one version will not reproduce it on the next."}],"correct":true,"tempting":null},{"text":[{"text":"The version determines which autoencoder was used, and mixing frames encoded by different autoencoders in one timeline produces inconsistent grain and sharpness."}],"correct":false,"tempting":[{"text":"Describes a plausible mismatch, but the decode has already happened: the delivered frames carry whatever texture they carry regardless of what you record."}]}],"order":[1,3,2,0],"why":null},"prev":{"slug":"reading-a-still-for-failure","title":"Predicting which second will break","minutes":9},"next":{"slug":"where-it-actually-wins","title":"Where this is already the right tool","minutes":8}}}