{"id":13522539,"url":"https://github.com/AudioKit/Flow","last_synced_at":"2025-03-31T22:31:48.085Z","repository":{"id":58478981,"uuid":"530761253","full_name":"AudioKit/Flow","owner":"AudioKit","description":"Generic node graph editor","archived":false,"fork":false,"pushed_at":"2024-04-24T05:28:36.000Z","size":1143,"stargazers_count":301,"open_issues_count":5,"forks_count":17,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-10-29T18:05:56.607Z","etag":null,"topics":["node","signal-flow","swiftui"],"latest_commit_sha":null,"homepage":"https://www.audiokit.io/Flow/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AudioKit.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},"funding":{"github":"AudioKit"}},"created_at":"2022-08-30T17:30:05.000Z","updated_at":"2024-10-28T07:14:55.000Z","dependencies_parsed_at":"2024-01-13T22:59:47.947Z","dependency_job_id":"3e9005c8-24d5-463b-80ad-90b6d88878ef","html_url":"https://github.com/AudioKit/Flow","commit_stats":{"total_commits":289,"total_committers":10,"mean_commits":28.9,"dds":"0.39446366782006925","last_synced_commit":"763878a766114b096780db037fb2bd28cec72806"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AudioKit%2FFlow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AudioKit%2FFlow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AudioKit%2FFlow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AudioKit%2FFlow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AudioKit","download_url":"https://codeload.github.com/AudioKit/Flow/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222281150,"owners_count":16960154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["node","signal-flow","swiftui"],"created_at":"2024-08-01T06:00:48.712Z","updated_at":"2024-11-02T06:31:29.771Z","avatar_url":"https://github.com/AudioKit.png","language":"Swift","readme":"# Flow\n\n[![Tests](https://github.com/AudioKit/Flow/actions/workflows/tests.yml/badge.svg)](https://github.com/AudioKit/Flow/actions/workflows/tests.yml)\n\nGeneric node graph editor. Generate a `Patch` from your own data model. Update\nyour data model when the `Patch` changes.\n\n![flow-demo](https://user-images.githubusercontent.com/13122/204678924-64a37ef5-522e-4da5-9c79-c2c6f9f745a6.gif)\n\n```swift\nfunc simplePatch() -\u003e Patch {\n    let generator = Node(name: \"generator\", outputs: [\"out\"])\n    let processor = Node(name: \"processor\", inputs: [\"in\"], outputs: [\"out\"])\n    let mixer = Node(name: \"mixer\", inputs: [\"in1\", \"in2\"], outputs: [\"out\"])\n    let output = Node(name: \"output\", inputs: [\"in\"])\n\n    let nodes = [generator, processor, generator, processor, mixer, output]\n\n    let wires = Set([Wire(from: OutputID(0, 0), to: InputID(1, 0)),\n                     Wire(from: OutputID(1, 0), to: InputID(4, 0)),\n                     Wire(from: OutputID(2, 0), to: InputID(3, 0)),\n                     Wire(from: OutputID(3, 0), to: InputID(4, 1)),\n                     Wire(from: OutputID(4, 0), to: InputID(5, 0))])\n\n    var patch = Patch(nodes: nodes, wires: wires)\n    patch.recursiveLayout(nodeIndex: 5, at: CGPoint(x: 800, y: 50))\n    return patch\n}\n\nstruct ContentView: View {\n    @State var patch = simplePatch()\n    @State var selection = Set\u003cNodeIndex\u003e()\n\n    var body: some View {\n        NodeEditor(patch: $patch, selection: $selection)\n            .onNodeMoved { index, location in\n                print(\"Node at index \\(index) moved to \\(location)\")\n            }\n            .onWireAdded { wire in\n                print(\"Added wire: \\(wire)\")\n            }\n            .onWireRemoved { wire in\n                print(\"Removed wire: \\(wire)\")\n            }\n    }\n}\n```\n\n## Documentation\n\nThe API Reference can be found on [the AudioKit Website](https://www.audiokit.io/Flow). \nPackage contains a demo project and a playground to help you get started quickly.\n","funding_links":["https://github.com/sponsors/AudioKit"],"categories":["Swift Libraries"],"sub_categories":["Renderers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAudioKit%2FFlow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAudioKit%2FFlow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAudioKit%2FFlow/lists"}