{"id":50857637,"url":"https://github.com/ben-wes/pd-stash","last_synced_at":"2026-06-14T19:04:08.409Z","repository":{"id":244820477,"uuid":"816365792","full_name":"ben-wes/pd-stash","owner":"ben-wes","description":"Puredata (Pd) abstractions for preset management, based on central [stash/hub] and small [stash] plugin objects","archived":false,"fork":false,"pushed_at":"2025-12-31T16:04:46.000Z","size":2229,"stargazers_count":9,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-05T00:56:31.773Z","etag":null,"topics":["pd","preset","puredata"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ben-wes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-17T15:41:51.000Z","updated_at":"2025-12-31T16:00:05.000Z","dependencies_parsed_at":"2024-06-28T17:53:37.942Z","dependency_job_id":null,"html_url":"https://github.com/ben-wes/pd-stash","commit_stats":null,"previous_names":["ben-wes/pd_stash"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/ben-wes/pd-stash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-stash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-stash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-stash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-stash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ben-wes","download_url":"https://codeload.github.com/ben-wes/pd-stash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-wes%2Fpd-stash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34333873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pd","preset","puredata"],"created_at":"2026-06-14T19:04:07.421Z","updated_at":"2026-06-14T19:04:08.397Z","avatar_url":"https://github.com/ben-wes.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# [stash/hub] + [stash]\nPuredata (Pd) abstractions for preset management, based on central [stash/hub] and small [stash] plugin objects\n\n![stash-help.pd screenshot](stash-help.pd.png)\n\n## Requirements\n* requires `iemguts` library (available via `Deken`)\n\n## Usage\n* connect [stash] objects to any number of objects to store and restore their values (connections are made via \"cross-connecting\" - inlet-\u003eoutlet, outlet-\u003einlet)\n* create a central [stash/hub] to control presets (store, restore, record, stop, save, load, ease, morph, etc.)\n* an additional [stash/arr \u003carray_name\u003e] object can be used to store and restore array values\n\n## Features\n* handles all objects that output their state on `bang` input\n* save / load preset files\n* store (and restore) arbitrary amount of preset states\n* ease states with a variety of ease functions\n* morph between states with float input (0..1 or 1..0 - depending on start value)\n* record and play back value changes instead of single preset snapshots\n* additional helper object [stash/arr] facilitates management of array values\n* custom color and id definitions for [stash] objects\n\nSee help of [stash] object for example application.\n\n# Flags and messages\n## [stash]\n### creation arguments\n* `-color (black / \u003chex color\u003e)` to set the color:\n  * color will be generated based on id if no argument is given\n  * `-color black` will create a black object (this can also be achieved by just setting the `-black` flag)\n  * you can set any hexadecimal value - e.g. `-color #ddff22`\n* `-id \u003cid\u003e`, `\u003cfloat\u003e` or `\u003csymbol\u003e` to manually set id via flag or simply by adding a float or symbol argument\n* `-noease` to avoid easing of values (and always directly jump to target value)\n* `-debug` to output id on creation\n* `-p $0` to manually set parent's $0 (and avoid `iemguts` dependency) \n* `-nogop` to display as regular object without graph-on-parent\n\n## [stash/hub]\n### messages (can also be set as creation arguments)\n* `\u003cfloat\u003e` to restore preset of given id (snapshot or recording). if no preset is present, the id is selected (to store or record into)\n* `restore \u003cid\u003e` to restore preset of given id\n* `target \u003cid\u003e` to set target id for `morph` interaction\n* `morph \u003cfloat`\u003e to morph to target state with float input of values `0..1` morph can go in both directions, dependet on whether 0 or 1 is first registered value\n* `store (\u003cid\u003e)` to store values to given id (or to selected id if no argument is given)\n* `load (\u003cfilename\u003e)` to load presets from file (or via file selection through openpanel if no argument is given)\n* `save (\u003cfilename\u003e)` to save presets to file (or via file selection through savepanel if no argument is given)\n* `delete (\u003cid\u003e)` to delete presets at given id (or selected id if no argument is given)\n* `click` or `edit` to display preset data in [text] dialog (should not be edited there due to Pd bug when displaying and storing data with escaped `\\,` and `\\;`)\n* `clear` to clear all presets\n* `record (\u003cid\u003e)` to start recording to given id (or to selected id if no argument is given)\n* `stop` to stop recording (or playback)\n* `showid (\u003c0/1\u003e)` to display [stash] ids next to objects\n* `grain \u003cfloat\u003e` to set grain size for easing in ms (default is 20, since this is based on Pd's [line])\n* `easetime \u003cfloat\u003e` to set ease duration in ms\n* `easemode \u003cmode\u003e` to set ease mode (see functions below)\n\n### flag\n* `-p $0` to manually set parent's $0 (and avoid `iemguts` dependency) \n\n### ease functions\nsee [ease] abstraction help patch `x/ease-help.pd`\n\n![ease-help.pd screenshot](x/ease-help.pd.png)\n\n## Mechanism\n* when creating a [stash] object, it will self-assign its id and then check among other [stash] objects in the patch whether the id is unique. it will repeat this process with random ids in a range of `0..999'999` until it finds a unique id (which in most cases should be instantly)\n* when storing a preset with [stash/hub], all [stash] objects get a `store` message, output a bang on their outlet and send back the numbers they receive from their inlet to [stash/hub] together with their id\n* easing and morphing are handled in the [stash] objects based on the messages they receive\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-wes%2Fpd-stash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fben-wes%2Fpd-stash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-wes%2Fpd-stash/lists"}