{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=rajkaria/photo-debt@0.1.0","method":"GET","rel":"https://rote.dev/rels/bootstrap-and-run","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"inspect":{"command":"rote play inspect https://play.modiqo.ai/rajkaria/photo-debt@0.1.0","effect":"read-only"},"installCliOnly":{"effect":"installs the rote CLI, nothing else","href":"https://play.modiqo.ai/install","method":"GET","rel":"https://rote.dev/rels/install-cli","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"run":{"command":"rote play run https://play.modiqo.ai/rajkaria/photo-debt@0.1.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/rajkaria/photo-debt@0.1.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"A photo library only ever grows. The shutter fires ten times to get one usable frame, every screenshot lands next to the family album, and the same image arrives again from a message, an AirDrop and a download. None of that is visible in the Photos app, which is organised by date and by face rather than by waste, so the honest number — how much of this is not really photographs — has never been on screen. It reads the Photos library's own database, through a copy opened read-only so the library is never touched, and a folder of loose images alongside it. What it reads is file metadata: name, size, dates, dimensions. For duplicate confirmation it hashes bytes; no image is ever decoded, displayed, uploaded or moved. Three separate claims, each carrying its own confidence and never added together without saying which is which. Files whose bytes are byte-for-byte identical: a fact. Extra frames from a burst, inferred from capture time, dimensions and file name: an inference. Screenshots old enough to have served","distribution":{"digest":"sha256:f4522561345cb26963f0d69e34bac5ae4b5da446eb1ccae7c411bb872f13e6c5","mediaType":"application/vnd.modiqo.rote-flow","size":1023394,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/rajkaria/photo-debt@0.1.0","inputPolicy":{"omittedValues":"inspect_full_parameters_before_collecting_values_or_consent","optionalWithDefault":"show_default_and_accept_override","optionalWithoutDefault":"omit_unless_supplied","required":"ask","secrets":"collect_locally_outside_conversation"},"links":{"docs":"https://rote.dev","page":"https://play.modiqo.ai/rajkaria/photo-debt@0.1.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/rajkaria/photo-debt@0.1.0.json"},"name":"photo-debt","owner":{"kind":"user","slug":"rajkaria"},"parameters":[{"default":"~/daily","description":"Created if missing. Everything this Play writes goes here and nowhere else.","example":"~/daily","input":{"allowCustom":true,"choices":[],"label":"Out dir"},"name":"out_dir","required":false,"type":"string"},{"default":"false","description":"true runs the whole Play against a bundled synthetic photo library and image folder, so a first run needs nothing installed and no account.","example":"false","input":{"allowCustom":true,"choices":[],"label":"Demo"},"name":"demo","required":false,"type":"string"},{"default":"~/Pictures/Photos Library.photoslibrary","description":"The Photos library to read. Its database is copied and opened read-only; the library itself is never modified and no image is opened.","example":"~/Pictures/Photos Library.photoslibrary","input":{"allowCustom":true,"choices":[],"label":"Library"},"name":"library","required":false,"type":"string"},{"default":"~/Pictures","description":"A folder of loose images to read alongside the library. Only file metadata is read.","example":"~/Pictures","input":{"allowCustom":true,"choices":[],"label":"Root"},"name":"root","required":false,"type":"string"},{"default":2,"description":"Seconds. Photos taken within this of each other are treated as one burst, which is what separates nine tries at one picture from nine pictures.","example":2,"input":{"allowCustom":true,"choices":[],"label":"Burst window"},"name":"burst_window","required":false,"type":"integer"},{"default":90,"description":"A screenshot older than this is counted as debt: it was made to be looked at once.","example":90,"input":{"allowCustom":true,"choices":[],"label":"Screenshot days"},"name":"screenshot_days","required":false,"type":"integer"},{"default":5,"description":"How many groups to name on the card. The totals are over everything, not just the rows shown.","example":5,"input":{"allowCustom":true,"choices":[],"label":"Top"},"name":"top","required":false,"type":"integer"},{"default":"true","description":"true reads candidate files to confirm a duplicate by content. false compares size and date only, which is faster and less certain.","example":"true","input":{"allowCustom":true,"choices":[],"label":"Hash dupes"},"name":"hash_dupes","required":false,"type":"string"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/rajkaria/photo-debt@0.1.0 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters","whenValuesOmitted":"Run step 1 before collecting inputs or showing defaults; omittedFields are unknown values, not absent defaults or exhaustive choices."},{"references":["/parameters","/requirements","/effects"],"step":3,"type":"review"},{"consentBoundary":"the user approves the exact play and parameter values","references":["/parameters","/requirements","/effects"],"step":4,"type":"obtain_run_consent"},{"action":{"command":"rote play run https://play.modiqo.ai/rajkaria/photo-debt@0.1.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/rajkaria/photo-debt@0.1.0 <name=value...> --yes"},"preservesAcquisitionBoundaries":["adapter_selection","oauth_dcr","google_discovery","static_token_setup","runtime_security_checks"],"requiresConsent":true,"step":5,"type":"run"}],"producedBy":{"roteVersion":"0.79.0"},"publishedAt":"2026-09-05T20:40:31.542953+00:00","reference":"rajkaria/photo-debt@0.1.0","requested":"rajkaria/photo-debt","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"hostToolRequirements":[{"command":"python3","required":true,"versionRequirement":null}],"localTools":["python3"],"roteCli":{"minimumVersion":"0.91.0"},"sessions":false},"resolution":"latest","schema":"rote.play.v1","stats":{"downloads":2,"installs":0},"steps":{"count":3,"names":["read_folder","read_photos","report"]},"title":"photo-debt","type":"play","version":"0.1.0","visibility":"public"}