Reflector application icon

Reflector

Part I

What Reflector Is

Reflector is an ideation tool for uncovering the myriad harmonic relationships that lie dormant across a sample library. No matter the style you work in, Reflector is made to inspire sample discovery and speed the path to composition. It searches your whole library for sounds that combine and sounds that resemble, and it keeps searching against the arrangement as it grows, so ideation moves quickly and you get to making music faster.

Reflector is currently built for tonal and textural material: pads, keys, strings, synths, guitars, vocals, field recordings with a tonal center, sound design that carries harmony. Reflector does not currently analyze rhythm. I would still encourage experimentation here: even though Reflector does not "beat match" at this time, retrieving against a rhythmic loop might still yield interesting results.

Let's say that you have 1000 samples and find one that you love. From here, you have a few options to begin creating with it. You could drop it into a DAW, perhaps mangle it a bit with effects or other means of processing, you could pull out another instrument and compose alongside it, or you can dig back into the other 999 samples and try to find something that pairs with the sound you isolated. It's an unreasonable expectation that one would be able to explore all of the possible relationships regarding harmonic compatibility and potential transpositions by simple A/B testing. With Reflector, you simply load the sample as a query and begin to retrieve across your library.

Most retrieval systems are static, meaning they stop searching once the query matches some results. Reflector exposes a DAW-like workflow so that the composer can retrieve against their ideas as they take shape. If you find yourself with 10 samples in an arrangement, and feel you have exhausted your potential retrieval options because the composition has changed dramatically from the initial query, Reflector will pull against your current arrangement and source other sounds in your library that match the arrangement you are currently working on.

Reflector is the stage before the DAW. A DAW wants ideas committed at 4/4 and 120 BPM. Reflector is for throwing paint on the canvas, finding what belongs together, and carrying that structure into a DAW once it takes shape. It runs entirely on your machine, it is free, and nothing you do touches the cloud.

Ethical Statement

Modern AI has been trained on the personal data of creators. Reflector uses synthetic audio for training. Meaning, all of the audio was generated via synthesis and configured to the needs of the application. At no point in this architecture is any copyrighted audio used, and I can assure users that at no point will it ever be. All of your usage data and audio will stay private on your machine, forever.

Part II

The Manual

01 Installing and first launch

Reflector is a free, signed application for macOS. Download it from GitHub, move it to your Applications folder, and open it. Because it is distributed outside the App Store, macOS may ask you to confirm the first launch: if it does, right-click the app icon, choose Open, and confirm. You only have to do this once.

On first launch Reflector starts its local analysis engine, and a brief loading state appears while that happens. The first query and the first session you load can take a moment longer while the engine warms up; subsequent actions are quicker.

02 Orientation

Reflector is not a DAW, but it's helpful to think of one when you open it for the first time as there are similarities. The first thing you will see in Reflector is the Session View. This is the classic DAW-like surface. The environment will be completely empty, including the Galaxy View, so let's get started.

The window has three areas you will return to constantly. On the left is the query panel, where you load a sample and read its matches. In the center is the timeline, where you place and arrange sounds, with the transport controls and sample playback display above it. The bottom right window takes you to the Galaxy View; it stays empty until you have saved your first session, so we will come back to it.

Reflector's empty Session View on first launch: the query panel on the left, the timeline with transport controls above it in the center, and the empty Galaxy View panel in the bottom right corner.

Fig. 1

Empty Session View, main regions labeled

03 Indexing your library

In order to use Reflector, samples must be indexed. This can be thought of as an analysis process that lets Reflector interact with your sample library. Use as many samples as you can: the more coverage you have in regards to sound, the more potential connections Reflector can surface. Index a few dozen samples to begin, just to get the idea.

When you click the index panel, Finder will open. Select a folder with your samples; Reflector accepts both lossless and lossy audio of any length. Some patience can be required during indexing, depending on the size of your folder and the length of the audio inside it. Once your folder is indexed, it stays that way forever unless you delete it.

A loaded index turns green with a checkmark. Next to your folder name are two buttons, a refresh button and a trash button. Use refresh when you add or remove samples from your library. Use trash when you want to delete the index entirely, and take note: this is irreversible.

Importantly, deleting an index will not delete your sessions, which are stored in a separate database. Since the audio is no longer indexed, the waveforms will appear as null. Re-index the same library, or any folder containing the audio files your sessions use, and they will restore as long as the file names have not changed. This will be mentioned periodically: any removal action in Reflector, whether a session, a piece of audio, or an index deletion, is permanent.

Reflector's index panel showing an indexed folder marked with a green checkmark and file count, with refresh and trash buttons beside it.

Fig. 2

Index panel, indexed folder with green checkmark, refresh + delete buttons

04 Your first query

To begin, load a sample as your query. Click Choose file in the query panel and select any audio file; its name appears once it is loaded. Press Search, and Reflector ranks your indexed library against that sample and lists the closest matches below. It's best not to think of the results as strictly ranked, as though result 1 is necessarily better than result 10. While there is an internal scoring mechanism that Reflector uses, the judgments are subjective and remain with the user. As an important note, Reflector will always attempt to surface something. If your indexed library has 20 sounds, and only a few are mutually compatible with a given query, not all of the results will be strong, and potentially none will be. This is why it is suggested to expand the library as much as possible.

Each result shows the sample's name and two controls: a play button to hear it on its own, and a plus button to add it straight to the timeline. Beside Search you will find the same controls for the query itself, and a plus to place the query on the timeline if you want to build around it.

Reflector's query panel with a loaded file and ten results, each result and the query itself showing a play button and a plus button.

Fig. 3

Query panel with a file loaded and its results

Play the sample on its own   Add it to the timeline. The query row (top) and every result below share the same pair of controls

05 Reading results: the two lenses

At the top right of the query panel is a small dropdown with two settings, compatibility and similarity.* This chooses the question Reflector asks of your library, and you can switch between them at any time to re-run the current query.

Compatibility, the default, finds sounds that combine well with your query, the material that would sit alongside it in an arrangement. Similarity finds sounds that resemble your query, which is useful for locating alternate takes, versions, and close relatives of a sound you already like. There is, admittedly, a bit of semantics here: heard musically, what is compatible and what is similar can feel like the same question. In practice the two lenses tend to agree near the top of the list and diverge as you move down it, and they can return very different lists from the same sample. Think of the dropdown as a simple expander for surfacing more material, and switch lenses whenever a query feels exhausted. The paper covers the technical details.

*See top right of the query panel in Fig. 3.

06 Transposition matches

A sound that does not match in its current key can still be a strong match once it is pitch-shifted. Below the direct results is a Find Transposition Matches button. Press it and Reflector searches your library again, this time trying all twelve pitch shifts of each candidate and surfacing the ones that become compatible when transposed.

Each transposition match names the interval it found and colors it by harmonic quality. You get three ways to place it: shifted up by the named interval, shifted down to the same pitch class an octave lower, or unshifted in its original key. Results arrive in pages, so use Load More to keep going.

Reflector's transposition matches list, each row showing the found interval, a play button, and shift-up, shift-down, and place-unshifted controls.

Fig. 4

A transposition match card with the up, down, and original controls

Play   Shift up by the named interval   Shift down to the same pitch class, an octave lower   Add unshifted, in its original key. The interval name at left is colored by harmonic quality

07 Building on the timeline

Every plus button places a sample on the timeline, the multi-track area in the center of the window. This functions exactly like a DAW. Placed samples appear as waveform blocks, and you arrange them freely in time and across lanes to build up an arrangement.

A Reflector session with several waveform blocks placed across multiple lanes on the timeline, forming an arrangement.

Fig. 5

A session timeline with waveform blocks placed across multiple lanes

08 Duplicating files and crossfading

Reflector does not currently allow for trimming or splicing audio. This would break the structure of the sample in the index. The feature is buildable, but not implemented in V1.

Hovering over the waveform block will expose some options. At the top right, the two overlapping squares are the duplicate button; pressing this makes a copy of the waveform and places it on the timeline. To the right of it is the delete button, which removes the waveform from the timeline. You can also simply press delete on your keyboard. Since Reflector works with raw, full-length audio samples, crossfading can be very helpful for giving your ideas a sense of musical development. After duplicating, simply drag the audio anywhere over a waveform and a crossfade will be automatically implemented at the transition point where the audio was placed. Check out the waveforms in Fig. 5 for a visual example.

Clicking on the waveform will auto-scroll to and highlight where the sample came from in the Query or Transposition panel. The transposition panel can get quite large once you start generating options, and this makes it easy to find a sample's source again.

A waveform block titled pulsesTes.wav with the duplicate and delete buttons visible in its top-right corner.

Fig. 6

A waveform block hovered, showing the duplicate and delete controls in the top-right corner

09 Transposing by hand

Beyond the transposition matches, you can transpose any placed sample by ear. Hold Option and drag a block up or down to shift its pitch. Playback pauses while you drag. When you release, press space to resume playback and hear the sample in its new key. You can also press enter at any time to move the transport to the start of the arrangement.

10 Further waveform controls

By hovering over the audio, the same way we did earlier to see the duplication and removal options, note the bottom left buttons for mute, solo, and volume controls. These respond in real time as the arrangement plays, so you can balance levels and isolate parts while you work.

The same waveform block, with mute, solo, and volume controls visible in its bottom-left corner.

Fig. 7

A waveform block hovered, showing the per-sample mute, solo, and volume controls

11 Letting Reflector suggest against your arrangement

To save your session, click the top right button underneath the preview bar that says Save. Reflector will prompt you to give the session a name; once done, click Create. A few things happen once this is done. First, the Galaxy View will appear populated for the first time; more on this soon. Reflector is now aware of all placements in your arrangement so far (assuming you have multiple samples on the timeline). Each time you save the session with changes, Reflector will re-analyze the arrangement. Once you have saved your session, a Suggest button will appear; it offers two tabs. Layer finds sounds that fit the current arrangement as it stands, material to add to what you already have. Transpositions finds sounds that fit once pitch-shifted, with the same up, down, and original placement choices as before, loaded in pages. As you add, remove, or move material and save again, the suggestions follow the arrangement.

Suggestions need a saved session to work; the Suggest button will not appear until the session is saved.

Reflector's suggest panel with the Layer tab active, showing four suggested samples, each with play and add controls, above a populated arrangement.

Fig. 8

Suggest panel, Layer tab populated against a live arrangement

12 Reading the arrangement

Reflector gives you a few at-a-glance read-outs of your arrangement's harmonic character. Waveform blocks carry a harmonic color that reflects their tonal content. On the session timeline, a thin, colored form strip summarizes the shape of the arrangement across time. Additionally, a living polygon animates the combined pitch-class content of whatever is currently sounding. These are displays; they are there to help you see the harmony you are assembling.

A timeline with waveform blocks tinted in two different harmonic colors, one bluish group and one purplish group.

Fig. 9

Harmonic color + form strip

The two boxed blocks are tinted differently by harmonic content. Reading these tints left to right across the timeline is the form strip the text describes

The transport bar with play and stop buttons, and a small living polygon icon that animates with pitch-class content during playback.

Fig. 10

Living polygon

The circled polygon animates with the combined pitch-class content of whatever is currently sounding

13 The Galaxy

The Galaxy View maps your saved sessions in a navigable three-dimensional space. Each geometric node is a session. Click on a node to zoom in. Once you have multiple sessions, and therefore multiple nodes, the panel at the top right will expose the key of your arrangement and a text field that will say either "tight", "moderate", or "exploratory", a description of how dispersed the harmonic content of your arrangement is. In the same panel, nearby sessions will show other arrangements that contain samples that might work well with your selected session. These are scored, and clicking the dropdown arrow will expose the samples inside each. You can play these here while your session is running; hovering over a file's name reveals an add button, which moves it from one session to another. This is a duplicate action; adding a sample from one session to another will not remove it from its native origin. Finally, once the Galaxy View is populated you will begin to notice thin pulsating blue lines connecting nodes together. This is a visual cue: the brighter the line, the more Reflector thinks the sessions share compatible harmony.

The Galaxy View on first opening it, zoomed out to fit a small cluster of session nodes.

Fig. 11

The Galaxy View zoomed out to fit, the first time you open it
The Galaxy view with a session selected, showing a floating panel in the top right with the session's key, dispersion, and a list of nearby sessions.

Fig. 12

A session selected, with the nearby-sessions panel exposed in the top right
The nearby-sessions panel in isolation, with two entries expanded to show their individual sample files, two of which carry transposition badges.

Fig. 13

The nearby-sessions panel in isolation, entries expanded to show individual samples

14 Sessions

Your work is organized into sessions. Save at any time and give the session a name; a marker shows when you have unsaved changes. Saved sessions appear in a history list you can reopen or delete in the Galaxy View.

Sessions live in their own store, separate from your indexes. As mentioned, deleting an index does not delete your sessions; the waveforms simply show as empty until you re-index the audio, at which point they restore by filename. Deleting a session is permanent.

15 Exporting

Reflector exposes two options for exporting your sessions. The Export button will export the entire session as one .wav file, like bouncing in a DAW. The Stems button will export all of the samples in your arrangement, with placements, to wherever you specify on your machine. The latter is useful if you want to move the arrangement to a DAW for more granular work.

16 A note on permanence and your data

As mentioned, a few actions in Reflector cannot be undone, so they are worth stating plainly in one place. Deleting a session, deleting an index, removing a placed sample, and clearing the timeline are all permanent; there is no ⌘Z here. Indexes and sessions are stored separately, so removing one does not remove the other. Meaning, deleting a session will not delete audio from the index, and while deleting an index renders audio null in a saved session, once that audio is indexed again, it will restore. But crucially, it must have the same name. Everything Reflector stores lives on your machine.

Part III

Under the Hood

If you are interested in the technical details behind Reflector:

Good to Know / Limitations

Reflector listens to harmony, specifically pitch-class content, and nothing else. A sample that is harmonically compatible may still be wrong in timbre, texture, dynamics, or rhythm, and those judgments stay with you. Each sample is represented by a single summary of its most stable harmonic content, so a sample that modulates heavily may be represented mainly by its steadiest section.

Starting Points

  • Finding samples for a work in progress by querying against the incomplete song.
  • Pulling a texturally right sound into key by transposition, when it is close but not in tune with the arrangement.
  • Rediscovering forgotten corners of a large library you have not touched in years.
  • Scaffolding a whole piece outward from a single sample you love.
  • Using the Galaxy to connect two past sessions that share a harmonic vocabulary.

Contact

Reflector is independent software, and hearing from the people who use it is how it improves. If something breaks, if something confuses you, or if you have an idea for what it should do next, write to me.