The best Hacker News stories from Show from the past day

Go back

Latest posts:

Show HN: Easily Visualize Your SQLAlchemy Data Models in a Nice SVG Diagram

Show HN: Easily Visualize Your SQLAlchemy Data Models in a Nice SVG Diagram

Show HN: Twogether AI – Multi-Person Photo Generation API

Hey everyone, at Magicflow (YC W23) we're helping our customers run AI image generation in production, enabling them to produce high-quality photos at scale.<p>We are launching a scalable API today that makes it possible to create multi-person portrait photos: which means the ability to create real-looking photos of any two persons interacting with each other in some way only by providing a prompt and the person's pose. Generating this kind of photo requires a deep understanding of the AI ecosystem, a knowledge gap many companies face. In order to make the photos look real with high consistency and for a low cost, chaining of many models is required, and an excellent understanding of how to tweak with the various params of each one.<p>We also handle the infrastructure required to generate the photos, which can be a challenge when dealt with alone, especially for companies with a small backend team (we can scale to thousands of requests per day and generate 100 photos in about 3 minutes). Our customers today use this technology for the following use cases: creating new photo albums from old-scanned albums, providing personalized content for user acquisition campaigns, enabling new kinds of experiences in physical venues, and creating humorous photos with celebrities.<p>There is a significant tradeoff between creating a robust abstraction layer on top of Stable Diffusion capabilities and providing customers with more control over various options. The API currently allows you to manipulate the following parameters: the pose of the couple (hugging, taking a selfie, etc.), their facial expressions, the style of the photo (realistic, cartoon, painting, etc.), as well as the location, theme, and outfits (e.g., ski vacation, on the beach)<p>We created a free demo app for you to view examples and try live: <a href="https://twogether.ai?source=hn" rel="nofollow noreferrer">https://twogether.ai?source=hn</a> (no user or payment needed). For full API access, contact me at yardenst@magicflow.ai. We can typically set you up within a day, but an onboarding session is required to ensure responsible API usage.

Show HN: Twogether AI – Multi-Person Photo Generation API

Hey everyone, at Magicflow (YC W23) we're helping our customers run AI image generation in production, enabling them to produce high-quality photos at scale.<p>We are launching a scalable API today that makes it possible to create multi-person portrait photos: which means the ability to create real-looking photos of any two persons interacting with each other in some way only by providing a prompt and the person's pose. Generating this kind of photo requires a deep understanding of the AI ecosystem, a knowledge gap many companies face. In order to make the photos look real with high consistency and for a low cost, chaining of many models is required, and an excellent understanding of how to tweak with the various params of each one.<p>We also handle the infrastructure required to generate the photos, which can be a challenge when dealt with alone, especially for companies with a small backend team (we can scale to thousands of requests per day and generate 100 photos in about 3 minutes). Our customers today use this technology for the following use cases: creating new photo albums from old-scanned albums, providing personalized content for user acquisition campaigns, enabling new kinds of experiences in physical venues, and creating humorous photos with celebrities.<p>There is a significant tradeoff between creating a robust abstraction layer on top of Stable Diffusion capabilities and providing customers with more control over various options. The API currently allows you to manipulate the following parameters: the pose of the couple (hugging, taking a selfie, etc.), their facial expressions, the style of the photo (realistic, cartoon, painting, etc.), as well as the location, theme, and outfits (e.g., ski vacation, on the beach)<p>We created a free demo app for you to view examples and try live: <a href="https://twogether.ai?source=hn" rel="nofollow noreferrer">https://twogether.ai?source=hn</a> (no user or payment needed). For full API access, contact me at yardenst@magicflow.ai. We can typically set you up within a day, but an onboarding session is required to ensure responsible API usage.

Show HN: Interactive AI Resume/LinkedIn for better networking/job hunting

Generally, I found resumes too vague to get to know anyone (hence why no one networks with them), professional blogs too low ROI, walking up to people unscalable, and cold messaging fairly low success-rate.<p>I wanted the 'marketing tool' of networking to get myself out there. Something that lets me: 1) Draw people into a conversation before they've realized it 2) Make them remember me and ultimately reach out to me 3) See what people asked me so I can further refine my interactive profile and start the networking cycle again<p>So I built a website where anyone can create these interactive profiles starting with a resume import.<p>The one I linked is a test profile but on my personal one, I got: 1) >10x more people reaching out to me when I put myself out there to network (some were VCs actually; though I'm not fundraising right now) 2) A bunch of engagement questions where I can see what people want to know about me so I can further enhance my profile and improve my own outreach<p>This is still in early stages, but if I go to a conference/join a new team at a new job/need to network for some other reason, I think I'll put this on my LinkedIn/business card/etc.<p>The (limited) data so far suggests people are more willing to first talk to the interactive profile before reaching out to me. I guess that makes sense, it's less commitment than emailing me. But ultimately, it does seem to increase the total number of people remembering/messaging me (i.e. improving the professional networking funnel as it were).<p>I would love y'all's thoughts on it<p>Edit: I can see some of you asking questions lol. Way more fun than LinkedIn's 'This random person looked at your profile but what did they want to know? We have no idea'.

Show HN: SirixDB – Bitemporal binary JSON database system and event store

I had already posted the project a couple of years ago, and it gained some interest, but a lot of stuff has been done since then, especially regarding performance, a completely new JSON store, a REST API, various internals refactored, an improved JSONiq based query engine allowing updates, implementing set-oriented join optimizations, a now already dated web UI, a new Kotlin based CLI, a Python and TypeScript client to ease the use of Sirix... First prototypes from a precursor stem already from 2005.<p>So, what is it all about?<p>The system uses ideas from ZFS (a keyed index trie, storing checksums in parent pages...) and Git (a persistent index structure that shares unchanged pages between revisions) but appends new tree roots on each commit [1][2].<p>It is a JSON DBS. The system stores fine granular JSON nodes. Thus, there's almost no limit to the structure and size of an object. Objects can be arbitrarily nested, and updates are cheap.<p>On a high level, it supports space-efficient snapshots, tracking changes by an author / optional commit messages, time travel queries, reverting to previous revisions (while all revisions in-between still exist for audits...), or retrieving the changes of whole (sub)trees.<p>On the one hand, it's, thus, a bitemporal DBS, but on the other hand, it can be used as a simple event store. It stores the state after an event or a change occurs and tracks the changes.<p>Thus, an entity, a node in the JSON structure, can be updated to new values and eventually be removed while the history is easily retrievable, or we can easily revert to a previous state. The system assigns a unique ID to each new node, which never changes and is never reused (even after the deletion of the node). Thus, the system stores the state after the change/event and the event itself (the change event).<p>The leaf pages of the index structures are not simply copied during a write, but a sliding window algorithm is applied, such that only modified nodes and nodes that fall out of the sliding window have to be written. A predefined window length is configurable. The system avoids write-peaks, which would occur due to full snapshots and having to read a long chain of incremental changes in between.<p>Thus, it's best suited for fast flash drives with fast random reads and sequential writes. Data is never overwritten thus, audit trails are given for free.<p>Another aspect is that the system does not need a WAL (that is basically a second data store) due to atomic switches of a root index page and a single permitted read/write transaction (txn) concurrently and in parallel to N read-only txns, which are bound to specific revisions during the start. Reads do not involve any locks.[2]<p>A path summary, an unordered set of all paths to leaf nodes in the tree, is built and enables various optimizations. Furthermore, a rolling hash is optionally built, whereas all ancestor node hashes are adapted during inserts.<p>A dated Jupyter notebook with some examples can be found in [3], and overall documentation in [4].<p>The query engine[5] Brackit is retargetable (a couple of interfaces and rewrite rules have to be implemented for DB systems) and especially finds implicit joins and applies known algorithms from the relational DB systems world to optimize joins and aggregate functions due to set-oriented processing of the operators.[6]<p>I've given an interview in [7], but I'm usually very nervous, so don't judge too harshly.<p>Give it a try, and happy coding!<p>Kind regards<p>Johannes<p>[1] <a href="https://sirix.io" rel="nofollow noreferrer">https://sirix.io</a> | <a href="https://github.com/sirixdb/sirix">https://github.com/sirixdb/sirix</a><p>[2] <a href="https://sirix.io/docs/concepts.html" rel="nofollow noreferrer">https://sirix.io/docs/concepts.html</a><p>[3] <a href="https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1YbED52RI3NMqqbG#scrollTo=CBWQIvc0Ov3P" rel="nofollow noreferrer">https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1Yb...</a><p>[4] <a href="https://sirix.io/docs/" rel="nofollow noreferrer">https://sirix.io/docs/</a><p>[5] <a href="http://brackit.io" rel="nofollow noreferrer">http://brackit.io</a><p>[6] <a href="https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koOWN50sgiFa5hSC" rel="nofollow noreferrer">https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koO...</a><p>[7] <a href="https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2" rel="nofollow noreferrer">https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2</a>

Show HN: SirixDB – Bitemporal binary JSON database system and event store

I had already posted the project a couple of years ago, and it gained some interest, but a lot of stuff has been done since then, especially regarding performance, a completely new JSON store, a REST API, various internals refactored, an improved JSONiq based query engine allowing updates, implementing set-oriented join optimizations, a now already dated web UI, a new Kotlin based CLI, a Python and TypeScript client to ease the use of Sirix... First prototypes from a precursor stem already from 2005.<p>So, what is it all about?<p>The system uses ideas from ZFS (a keyed index trie, storing checksums in parent pages...) and Git (a persistent index structure that shares unchanged pages between revisions) but appends new tree roots on each commit [1][2].<p>It is a JSON DBS. The system stores fine granular JSON nodes. Thus, there's almost no limit to the structure and size of an object. Objects can be arbitrarily nested, and updates are cheap.<p>On a high level, it supports space-efficient snapshots, tracking changes by an author / optional commit messages, time travel queries, reverting to previous revisions (while all revisions in-between still exist for audits...), or retrieving the changes of whole (sub)trees.<p>On the one hand, it's, thus, a bitemporal DBS, but on the other hand, it can be used as a simple event store. It stores the state after an event or a change occurs and tracks the changes.<p>Thus, an entity, a node in the JSON structure, can be updated to new values and eventually be removed while the history is easily retrievable, or we can easily revert to a previous state. The system assigns a unique ID to each new node, which never changes and is never reused (even after the deletion of the node). Thus, the system stores the state after the change/event and the event itself (the change event).<p>The leaf pages of the index structures are not simply copied during a write, but a sliding window algorithm is applied, such that only modified nodes and nodes that fall out of the sliding window have to be written. A predefined window length is configurable. The system avoids write-peaks, which would occur due to full snapshots and having to read a long chain of incremental changes in between.<p>Thus, it's best suited for fast flash drives with fast random reads and sequential writes. Data is never overwritten thus, audit trails are given for free.<p>Another aspect is that the system does not need a WAL (that is basically a second data store) due to atomic switches of a root index page and a single permitted read/write transaction (txn) concurrently and in parallel to N read-only txns, which are bound to specific revisions during the start. Reads do not involve any locks.[2]<p>A path summary, an unordered set of all paths to leaf nodes in the tree, is built and enables various optimizations. Furthermore, a rolling hash is optionally built, whereas all ancestor node hashes are adapted during inserts.<p>A dated Jupyter notebook with some examples can be found in [3], and overall documentation in [4].<p>The query engine[5] Brackit is retargetable (a couple of interfaces and rewrite rules have to be implemented for DB systems) and especially finds implicit joins and applies known algorithms from the relational DB systems world to optimize joins and aggregate functions due to set-oriented processing of the operators.[6]<p>I've given an interview in [7], but I'm usually very nervous, so don't judge too harshly.<p>Give it a try, and happy coding!<p>Kind regards<p>Johannes<p>[1] <a href="https://sirix.io" rel="nofollow noreferrer">https://sirix.io</a> | <a href="https://github.com/sirixdb/sirix">https://github.com/sirixdb/sirix</a><p>[2] <a href="https://sirix.io/docs/concepts.html" rel="nofollow noreferrer">https://sirix.io/docs/concepts.html</a><p>[3] <a href="https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1YbED52RI3NMqqbG#scrollTo=CBWQIvc0Ov3P" rel="nofollow noreferrer">https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1Yb...</a><p>[4] <a href="https://sirix.io/docs/" rel="nofollow noreferrer">https://sirix.io/docs/</a><p>[5] <a href="http://brackit.io" rel="nofollow noreferrer">http://brackit.io</a><p>[6] <a href="https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koOWN50sgiFa5hSC" rel="nofollow noreferrer">https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koO...</a><p>[7] <a href="https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2" rel="nofollow noreferrer">https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2</a>

Show HN: SirixDB – Bitemporal binary JSON database system and event store

I had already posted the project a couple of years ago, and it gained some interest, but a lot of stuff has been done since then, especially regarding performance, a completely new JSON store, a REST API, various internals refactored, an improved JSONiq based query engine allowing updates, implementing set-oriented join optimizations, a now already dated web UI, a new Kotlin based CLI, a Python and TypeScript client to ease the use of Sirix... First prototypes from a precursor stem already from 2005.<p>So, what is it all about?<p>The system uses ideas from ZFS (a keyed index trie, storing checksums in parent pages...) and Git (a persistent index structure that shares unchanged pages between revisions) but appends new tree roots on each commit [1][2].<p>It is a JSON DBS. The system stores fine granular JSON nodes. Thus, there's almost no limit to the structure and size of an object. Objects can be arbitrarily nested, and updates are cheap.<p>On a high level, it supports space-efficient snapshots, tracking changes by an author / optional commit messages, time travel queries, reverting to previous revisions (while all revisions in-between still exist for audits...), or retrieving the changes of whole (sub)trees.<p>On the one hand, it's, thus, a bitemporal DBS, but on the other hand, it can be used as a simple event store. It stores the state after an event or a change occurs and tracks the changes.<p>Thus, an entity, a node in the JSON structure, can be updated to new values and eventually be removed while the history is easily retrievable, or we can easily revert to a previous state. The system assigns a unique ID to each new node, which never changes and is never reused (even after the deletion of the node). Thus, the system stores the state after the change/event and the event itself (the change event).<p>The leaf pages of the index structures are not simply copied during a write, but a sliding window algorithm is applied, such that only modified nodes and nodes that fall out of the sliding window have to be written. A predefined window length is configurable. The system avoids write-peaks, which would occur due to full snapshots and having to read a long chain of incremental changes in between.<p>Thus, it's best suited for fast flash drives with fast random reads and sequential writes. Data is never overwritten thus, audit trails are given for free.<p>Another aspect is that the system does not need a WAL (that is basically a second data store) due to atomic switches of a root index page and a single permitted read/write transaction (txn) concurrently and in parallel to N read-only txns, which are bound to specific revisions during the start. Reads do not involve any locks.[2]<p>A path summary, an unordered set of all paths to leaf nodes in the tree, is built and enables various optimizations. Furthermore, a rolling hash is optionally built, whereas all ancestor node hashes are adapted during inserts.<p>A dated Jupyter notebook with some examples can be found in [3], and overall documentation in [4].<p>The query engine[5] Brackit is retargetable (a couple of interfaces and rewrite rules have to be implemented for DB systems) and especially finds implicit joins and applies known algorithms from the relational DB systems world to optimize joins and aggregate functions due to set-oriented processing of the operators.[6]<p>I've given an interview in [7], but I'm usually very nervous, so don't judge too harshly.<p>Give it a try, and happy coding!<p>Kind regards<p>Johannes<p>[1] <a href="https://sirix.io" rel="nofollow noreferrer">https://sirix.io</a> | <a href="https://github.com/sirixdb/sirix">https://github.com/sirixdb/sirix</a><p>[2] <a href="https://sirix.io/docs/concepts.html" rel="nofollow noreferrer">https://sirix.io/docs/concepts.html</a><p>[3] <a href="https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1YbED52RI3NMqqbG#scrollTo=CBWQIvc0Ov3P" rel="nofollow noreferrer">https://colab.research.google.com/drive/1NNn1nwSbK6hAekzo1Yb...</a><p>[4] <a href="https://sirix.io/docs/" rel="nofollow noreferrer">https://sirix.io/docs/</a><p>[5] <a href="http://brackit.io" rel="nofollow noreferrer">http://brackit.io</a><p>[6] <a href="https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koOWN50sgiFa5hSC" rel="nofollow noreferrer">https://colab.research.google.com/drive/19eC-UfJVm_gCjY--koO...</a><p>[7] <a href="https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2" rel="nofollow noreferrer">https://youtu.be/Ee-5ruydgqo?si=Ift73d49w84RJWb2</a>

Show HN: Send me an IRL message and watch it arrive

- This page is running directly on the Pico W in the stream, using microdot (but proxied out via cloudflare tunnel).<p>- There's a buzzer that plays a sound as well but the stream has no audio.<p>- There's a Pi Zero 2 W with a Camera Module 3 streaming the video. Streaming low latency video is painful. I tried mjpeg, Nginx+HLS/DASH, YouTube and Twitch. Twitch is definitely the easiest and best-performing.<p>- There's still a few seconds delay between sending your message and the video updating.

Show HN: Bulk Creation of Transcripts from YouTube Playlists with Whisper

I know there are various tools that are supposed to make this easy, but I couldn't find anything that did everything I wanted, so I made this today for fun. The web-based offerings all take forever and seem flaky, and you need to process one video at a time, with no control over the transcription settings. In contrast, my script lets you convert a whole playlist in bulk with full control over everything.<p>It's truly easy to use-- you can clone the repo, install to a venv, and be generating a folder full of high quality transcript text files in under 5 minutes. All you need to do is supply the URL to a YouTube playlist or to an individual video file and this tool does the rest automatically. It uses faster-whisper with a high beam_size, so it's a bit slower than you might expect, but this does result in higher accuracy. The best way to use this is to take an existing playlist, or create a new one on YouTube, start this script up, and come back the next morning with all your finished transcripts. It attempts to "upgrade" the output of whisper by taking all the transcript segments, gluing them together, and then splitting them back into sentences (it uses Spacy for this, or a simpler regex-based function). You end up with a single text file with the full transcript all ready to go for each video in the playlist, with a sensible file name based on the title of the video.<p>If you have CUDA installed, it will try to use it, but as with all things CUDA, it's annoyingly fragile and picky, so don't be surprised if you get a CUDA error even if you know for a fact CUDA is installed on your system. If you're looking for reliability, disable CUDA. But if you need to transcribe a LOT of transcripts, it does go much, much faster on a GPU.<p>Even if you don't have a GPU, if you have a powerful machine with a lot of RAM and cores, this script will fully saturate them and can download and process multiple videos at the same time. The default settings are pretty good for that situation. But if you have a slower machine, you might want to use a smaller Whisper model (like `base.en` or even `tiny.en`) and dial down the beam_size to 2.

Show HN: Bulk Creation of Transcripts from YouTube Playlists with Whisper

I know there are various tools that are supposed to make this easy, but I couldn't find anything that did everything I wanted, so I made this today for fun. The web-based offerings all take forever and seem flaky, and you need to process one video at a time, with no control over the transcription settings. In contrast, my script lets you convert a whole playlist in bulk with full control over everything.<p>It's truly easy to use-- you can clone the repo, install to a venv, and be generating a folder full of high quality transcript text files in under 5 minutes. All you need to do is supply the URL to a YouTube playlist or to an individual video file and this tool does the rest automatically. It uses faster-whisper with a high beam_size, so it's a bit slower than you might expect, but this does result in higher accuracy. The best way to use this is to take an existing playlist, or create a new one on YouTube, start this script up, and come back the next morning with all your finished transcripts. It attempts to "upgrade" the output of whisper by taking all the transcript segments, gluing them together, and then splitting them back into sentences (it uses Spacy for this, or a simpler regex-based function). You end up with a single text file with the full transcript all ready to go for each video in the playlist, with a sensible file name based on the title of the video.<p>If you have CUDA installed, it will try to use it, but as with all things CUDA, it's annoyingly fragile and picky, so don't be surprised if you get a CUDA error even if you know for a fact CUDA is installed on your system. If you're looking for reliability, disable CUDA. But if you need to transcribe a LOT of transcripts, it does go much, much faster on a GPU.<p>Even if you don't have a GPU, if you have a powerful machine with a lot of RAM and cores, this script will fully saturate them and can download and process multiple videos at the same time. The default settings are pretty good for that situation. But if you have a slower machine, you might want to use a smaller Whisper model (like `base.en` or even `tiny.en`) and dial down the beam_size to 2.

Show HN: Bulk Creation of Transcripts from YouTube Playlists with Whisper

I know there are various tools that are supposed to make this easy, but I couldn't find anything that did everything I wanted, so I made this today for fun. The web-based offerings all take forever and seem flaky, and you need to process one video at a time, with no control over the transcription settings. In contrast, my script lets you convert a whole playlist in bulk with full control over everything.<p>It's truly easy to use-- you can clone the repo, install to a venv, and be generating a folder full of high quality transcript text files in under 5 minutes. All you need to do is supply the URL to a YouTube playlist or to an individual video file and this tool does the rest automatically. It uses faster-whisper with a high beam_size, so it's a bit slower than you might expect, but this does result in higher accuracy. The best way to use this is to take an existing playlist, or create a new one on YouTube, start this script up, and come back the next morning with all your finished transcripts. It attempts to "upgrade" the output of whisper by taking all the transcript segments, gluing them together, and then splitting them back into sentences (it uses Spacy for this, or a simpler regex-based function). You end up with a single text file with the full transcript all ready to go for each video in the playlist, with a sensible file name based on the title of the video.<p>If you have CUDA installed, it will try to use it, but as with all things CUDA, it's annoyingly fragile and picky, so don't be surprised if you get a CUDA error even if you know for a fact CUDA is installed on your system. If you're looking for reliability, disable CUDA. But if you need to transcribe a LOT of transcripts, it does go much, much faster on a GPU.<p>Even if you don't have a GPU, if you have a powerful machine with a lot of RAM and cores, this script will fully saturate them and can download and process multiple videos at the same time. The default settings are pretty good for that situation. But if you have a slower machine, you might want to use a smaller Whisper model (like `base.en` or even `tiny.en`) and dial down the beam_size to 2.

Show HN: LLM Verified with Monte Carlo Tree Search

This is a weekend hack that I'd like to further develop as it's working surprisingly well.<p>Using MCTS, we can explore a space of possible verified programs with an LLM. We check the partial programs at each step, and so steer towards programs that pass the verifier.<p><a href="https://github.com/namin/llm-verified-with-monte-carlo-tree-search">https://github.com/namin/llm-verified-with-monte-carlo-tree-...</a>

Show HN: LLM Verified with Monte Carlo Tree Search

This is a weekend hack that I'd like to further develop as it's working surprisingly well.<p>Using MCTS, we can explore a space of possible verified programs with an LLM. We check the partial programs at each step, and so steer towards programs that pass the verifier.<p><a href="https://github.com/namin/llm-verified-with-monte-carlo-tree-search">https://github.com/namin/llm-verified-with-monte-carlo-tree-...</a>

Show HN: Open-source digital stylus with six degrees of freedom

Show HN: Open-source digital stylus with six degrees of freedom

Show HN: Open-source digital stylus with six degrees of freedom

Show HN: Open-source digital stylus with six degrees of freedom

Show HN: Koelsynth – a simple FM synthesis library

This is part of my journey on pybind11. I wrote a tiny FM Synthesis library in C++ and a Python wrapper for that using pybind11.<p>There is a command-line piano app in the examples directory if you want to play with it. Here is the link: <a href="https://github.com/charstorm/koelsynth/tree/main/examples/simple">https://github.com/charstorm/koelsynth/tree/main/examples/si...</a><p>My next target is to attach this to some kind of physics simulation - like a bunch of balls moving around in a box with some internal walls. When the ball hits certain trigger points, it produces the sound.

Show HN: Koelsynth – a simple FM synthesis library

This is part of my journey on pybind11. I wrote a tiny FM Synthesis library in C++ and a Python wrapper for that using pybind11.<p>There is a command-line piano app in the examples directory if you want to play with it. Here is the link: <a href="https://github.com/charstorm/koelsynth/tree/main/examples/simple">https://github.com/charstorm/koelsynth/tree/main/examples/si...</a><p>My next target is to attach this to some kind of physics simulation - like a bunch of balls moving around in a box with some internal walls. When the ball hits certain trigger points, it produces the sound.

< 1 2 3 ... 470 471 472 473 474 ... 1003 1004 1005 >