documenting and images + files

This commit is contained in:
Tim Caldwell
2019-08-04 17:25:14 +02:00
parent 9c85ba9621
commit daeedfaa88
21 changed files with 187 additions and 76 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,40 @@
## BOM
REFERENCE | QUANTITY | DESCRIPTION | PACKAGE | NOTE
--- | --- | --- | --- | ---
R1, R2, R3, R4 | 4 | 1K Resistor | through-hole | -
R5 | 1 | 220 Resistor | through-hole | -
R6 | 1 | 100K Resistor | through-hole | -
R7 | 1 | 470 Resistor | through-hole | -
D1, D2, D3, D4, D5, D6, D7, D8 | 8 | BAT85 Diode | through-hole | -
D9 | 1 | 1N4148 Diode | through-hole | -
U1 | 1 | MCP3008 IC | DIP-16 | you can get these from mouser ,adafruit, even ali
U2 | 1 | 6N138 IC | DIP-8 | -
RV1, RV2, RV3, RV4 | 4 | 1K_LINEAR_POT | ALPHA | tayda ones work although shaft may be too short
J1, J2, J3, J4 | 4 | 3.5MM_JACK | THONKICONN | from thonk or 50pc from modular addict
J5 | 1 | MIDI_DIN_IN | SD-50BV | mouser
J6 | 1 | 1X1_PIN_HEADER | - | -
J7 | 1 | RCA_JACK | RCJ-024 | mouser or ali
J8 | 1 | 20X2_PIN_HEADER | long pins | this needs to be the long "hat" version
### OPTIONAL :
- if you want your ic's in sockets you should buy some DIP-8 /16 also now
- if you only want the _analog_inputs_ and not interested in _serial_midi_, you already have usb midi etc, then you can obmit _R5_, _R6_, _R7_, _D9_, _U2_ from the BOM - see circuit schematic for details
## BUILD
start with the lowest to place components : resistors, diodes, ic's
next i would place the two headers since soldering from the top can be awkward with too many components - __NOTE__ these need to be placed __upside down!__ ,:
- _J8_ needs the pins facing up from top of pcb so the screen can go ontop and raspberry pi can go underneath
- _J6_ also needs to soldered from the top so a jumper from the pi board can be run to bottom of circuit
finally place the pots and jacks.
### rca video-out
if you want RCA video out from the pi on this pcb a jumper needs to be run from _J6_ to the composite video out on the raspberry pi board. on pi0 this is a labelled pin, however on pi3 you will need to solder directly to the board. i used a header-cable, cut one side to be soldered.
need to add some images and links to this guide !

Binary file not shown.

Binary file not shown.

View File

@@ -27,10 +27,10 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.3232521"
inkscape:cx="189.94766"
inkscape:cx="91.328533"
inkscape:cy="997.28181"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:current-layer="g4563-7-1"
showgrid="false"
inkscape:window-width="1366"
inkscape:window-height="706"
@@ -45,7 +45,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -168,18 +168,18 @@
transform="scale(0.93646137,1.0678497)"
id="text5423"
y="13.338742"
x="19.363272"
x="20.29318"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.43036103px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';letter-spacing:0.10847916px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
xml:space="preserve"><tspan
style="fill:#000000;stroke-width:0.2"
style="fill:#ffffff;fill-opacity:1;stroke-width:0.2"
id="tspan5421"
y="13.338742"
x="19.363272"
x="20.29318"
sodipodi:role="line"><tspan
id="tspan5419"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#000000;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#ffffff;fill-opacity:1;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
y="13.338742"
x="19.363272">CLR BNK</tspan></tspan></text>
x="20.29318">FRAMES</tspan></tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
@@ -650,7 +650,7 @@
id="tspan5567"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#000000;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
y="13.338742"
x="19.363272">CLR BNK</tspan></tspan></text>
x="19.363272">CLR BK</tspan></tspan></text>
</g>
<g
transform="translate(11.383333,22.37619)"
@@ -699,6 +699,37 @@
y="13.414604"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#ffffff;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
id="tspan1093">CLR ]</tspan></tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="34.217781"
y="10.172296"
id="text1049-6"><tspan
sodipodi:role="line"
x="34.217781"
y="10.172296"
id="tspan1047-7"
style="font-size:4.93888903px;line-height:1;stroke-width:0.26458332"><tspan
x="34.217781"
y="10.172296"
style="font-weight:bold;font-size:4.93888903px;line-height:1;fill:#ffffff;stroke-width:0.26458332"
id="tspan1045-3">⦿</tspan></tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.43036103px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';letter-spacing:0.10847916px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
x="37.195122"
y="13.395443"
id="text1097-2"
transform="scale(0.93646137,1.0678497)"><tspan
sodipodi:role="line"
x="37.195122"
y="13.395443"
id="tspan1095-3"
style="stroke-width:0.2"><tspan
x="37.195122"
y="13.395443"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#ffffff;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
id="tspan1093-7">REC</tspan></tspan></text>
</g>
<g
id="g4563"
@@ -945,5 +976,22 @@
style="font-weight:normal;letter-spacing:0.10847916px;fill:#000000;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
id="tspan5467">CLR BNK</tspan></tspan></text>
</g>
<text
inkscape:label="text5373"
transform="scale(0.93646138,1.0678497)"
id="text5414-5"
y="52.974205"
x="32.768494"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.43036103px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';letter-spacing:0.10847916px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
xml:space="preserve"><tspan
style="fill:#ffffff;stroke-width:0.2"
id="tspan5412-2"
y="52.974205"
x="32.768494"
sodipodi:role="line"><tspan
id="tspan5410-8"
style="font-weight:normal;letter-spacing:0.10847916px;fill:#ffffff;stroke-width:0.2;stroke-miterlimit:4;stroke-dasharray:none"
y="52.974205"
x="32.768494">SHADER</tspan></tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -6,7 +6,7 @@
- connect the hdmi output or composite (via [3.5mm trrs]) to the display you want to use
- power the raspberry pi. you should see red lights on the pi board, the lcd display light up and the r_e_c_u_r splash screen on your video output
- after a few moments the interface should appear on lcd screen.
- the `DSPLY` key can be used to cycle through _display_modes_
## controlling the sampler
@@ -14,7 +14,7 @@
![keys][keys]
the controls on r_e_c_u_r work by mapping `keys` to `actions`. this map can be fully customised by editing the respective json file.
the controls on r_e_c_u_r work by mapping `keys` to `actions`. this map can be fully customised by editing the respective [json file].
the default layout uses a hard mapping for every key except the `<` - `>` - `■` in red. this means every other key triggers the same actions independent of the state r_e_c_u_r is in.
@@ -22,17 +22,14 @@ the _control keys_ ,`<` - `>` - `■` use a soft mapping. the action they trigge
these let you navigate and select folders, video files and settings when in `BROWSER` / `SETTINGS` mode, and by default control video playback (seek forward and back, pause/play) of the currently playing [NOW] sample in `SAMPLER` mode.
the display modes `SAMPLER`, `BROWSER` and `SETTINGS` are cycled by using the `DSPLY` key.
the display modes `SAMPLER`, `BROWSER` and `SETTINGS` are cycled by using the `DSPLY` key. (`FN + DSPLY` cycles back)
some actions are accessible through a _function_ layer, toggled by the `FN` key.
other controls include:
- `→` is used to switch the [NEXT] loaded sample to the [NOW] current sample
- `→` (`SWITCH`) is used to switch the [NEXT] loaded sample to the [NOW] current sample
- loading the sample in slot `x` into [NEXT]; where `x` is a key from `0` to `9`
- cropping the current sample to start (`[`) or end (`]`) at the current time
- cycling forward (`PRV BNK`) or back (`NXT BNK`) through the banks of sampleS , or clearing a bank (`CLR BNK`)
- ~~`< SPD` and `> SPD` are used to decrease and increase the speed of the currently playing clip (note not implemented yet)~~
some keys are empty to leave room for future features and user experimentation. i encourage you to modify your keymap or add custom actions you would like to use.
@@ -44,7 +41,7 @@ some keys are empty to leave room for future features and user experimentation.
![player_example][player_example]
this section displays information about what is in the video player : the position from the start and the end of currently playing video (yellow), what slot is playing [NOW] and what slot is loaded [NEXT]
this section displays information about what is in the video player : the position from the start and the end of currently playing sample (yellow), what slot is playing [NOW] and what slot is loaded [NEXT]
## `SAMPLER` display mode
@@ -74,7 +71,7 @@ this is where you can configure r_e_c_u_r's settings.
## `MESSAGE DISPLAY`
the bottom line shows the `control_mode` by default, but is also for messages:
the bottom line shows the `control_mode` by default (what mapping the keys are currently using), but is also for displaying messages:
- shows a yellow bar when _function_ layer is selected
- shows a blue bar for `INFO` messages
@@ -87,21 +84,23 @@ the bottom line shows the `control_mode` by default, but is also for messages:
the feature set of this project has grown beyond the simple 'seamless' video player it started out as. with more options inevitability comes more complexity and confusion. feel free to try whatever extensions interest you and ignore the rest.
<details>
<summary>capture</summary>
<summary> ## capture </summary>
## capture
live video-input is possible for _previewing_ and _recording_. this can be enabled in the `SETTINGS` display mode. you need to ensure the capture type is set correctly : choose from `piCamera`, `piCaptureSd1` or `usb`.
- `piCamera` , which reads from raspberry pi's CSI is a performant, realiable and cheap (see build docs) way to get video input into recur - note: limited to camera / rescanning
- `piCaptureSd1` is a more professional solution for intergrating quality, low latency composite-video input for raspi
- `usb` ; with this setting the recur attempts to read video from an attached usb source. intergration, quality and performance is less predictable but i have tried it using cheap capture cards and old web cams.
- `piCamera` reads from raspberry pi's CSI input. it is a performant, reliable and cheap (see build docs) way to get video input into recur - note: limited to camera / rescanning
- `piCaptureSd1` is currently the best solution for a general composite-video input to raspi. it is low latency with reasonable quality, and also handles s-video / component inputs (watch this space for possible other options to be supported)
- `usb` ; with this setting the recur attempts to read video from an attached usb source. integration, quality and performance is less predictable but i have tried it using these [cheap ezycap] dongles with some (lofi) success.
with `capture` enabled in the settings you can toggle _preview_ by pressing the `⦿` key. the capture input will take prioty over any video-samples playing.
pressing `FN + ⦿` will toggle sample recording. this can be enabled with or without `preview` on. the state of capture is displayed on the `PLAYER` display between the NOW and NEXT player infomation.
![capture_example][capture_example]
with `capture` enabled in the settings you can toggle _preview_ by pressing the `⦿` key. the capture input will take priority over any video-samples playing.
pressing `FN + ⦿` will toggle sample recording. this can be enabled with or without `preview` on. the state of capture is displayed on the `PLAYER` display between the NOW and NEXT.
after a `recording` is stopped the displayed state will be `saving..` while the raw video-footage is converted. after this the sample can be loaded from `video/internal_recordings/<date>-<count>.mp4` in _browser_. recur will automatically map new recordings to your current bank if there is space
NOTE: for users of _piCaptureSd1_: please ensure you have the composite video source active and plugged in to the HAT __before__ powering on recur. there seems to occationally be issues with recongising the hardware otherwise and a reboot is required.
NOTE: for users of _piCaptureSd1_: please ensure you have the composite video source active and plugged in to the HAT __before__ powering on recur. there seems to occasionally be issues with recognizing the hardware otherwise and a reboot is required.
</details>
<details>
@@ -109,17 +108,19 @@ NOTE: for users of _piCaptureSd1_: please ensure you have the composite video so
## user-inputs
the _usb-numpad_ is a convenient way to manually trigger __discrete actions__ within recur (any usb-keyboards can also be used). this is fine for basic sample loading and switching however more advance features benifit from __continuous control__ of parameters.
the _usb-numpad_ is a convenient way to manually trigger __discrete actions__ within recur (any usb-keyboards can also be used). this is fine for basic sample loading and switching however more advance features benefit from __continuous control__ of parameters.
this is where alternative user-input options are useful.
(another use is to sequence recur using external gear)
![midi_example][midi_example]
### usb-midi
this is by far the easiest way to control recur externally / with continuous control. plug a controller into one of recurs existing usb-sockets and set _midi_ to __usb__ in the `SETTINGS` display mode. you should see a message with the name of your device pop up. the midi-map can be configured in the same way as key-mappings.
this is by far the easiest way to control recur externally / with continuous control. plug a controller into one of recurs existing usb-sockets and set _midi_ to __usb__ in the `SETTINGS` display mode. you should see a message with the name of your device pop up. the [midi-map] can be configured in the same way as key-mappings.
### i_n_c_u_r pcb
for anyone interested in a diy 'standalone' solution i designed a pcb that allows continous control via `analog input` (four knobs and four 0-5v cv inputs) + `serial-midi`. the build guide for this can be found here. they can also be enabled in the `SETTINGS`
for anyone interested in a diy 'standalone' solution i designed a pcb that allows continuous control via `analog input` (four knobs and four 0-5v cv inputs) + `serial-midi`. see the [build guide] for more info. they can also be enabled in the `SETTINGS`
</details>
<details>
@@ -127,18 +128,21 @@ for anyone interested in a diy 'standalone' solution i designed a pcb that allow
## shaders
(fragment) shaders are small text-files of glsl-code that tell your graphics card what to draw. these can be used to create your own colours, shapes and patterns on the screen. this is a good resource for getting started writing shaders. recur can `load` a shader in a similar way to loading a sample, and allows you to update its `parameters` in real time.
fragment shaders are small text-files of glsl-code that can tell your graphics card what to show. these can be used to create your own colours, shapes and patterns on the screen. for an introduction to writing shaders i recommend Patricio Gonzalez Vivo's [The Book of Shaders].
recur can `load` a shader in a similar way to loading a sample, allowing you to trigger them and update their `parameters` in real time.
ensure that `shaders` is enabled in the settings and then use `DSPLY` to cycle to the `SHADER` display mode.
here you can navigate folders and files using `<` `>` and `■` same as `BROWSER/SETTINGS`. selecting a shader (`■`) will `load` it, and pressing `FN + 6` will toggle it on and off.
- `0-input`: these shaders use no input, everything you see is _generated_ by the code and graphics card
- `1-input`: shaders can also _process_ video. when active your current output will be passed through this shader (either from a `video sample` or `capture preview`) this is similar to the _effects_ section on a v4 mixer except now you can create, customize and share them too !
- `2-input`: allows you to perform fades, wipes and keys between two video-input sources - eg between `capture preview` and a `video sample` or two `video samples` (see notes below on how to set this up)
- `2-input`: allows you to perform fades, wipes and keys between two video-input sources - eg between `capture preview` and a `video sample` or even two `video samples` (see notes below on how to set this up)
the shader `parameters` are best controlled by _continuous inputs_ ( see user-inputs above) however can also be set by the numpad (somewhat clumsily):
- pressing `■` on a shader will `load` it; pressing `■` on the _loaded_ shader enters `SHADER_PARAM` control mode (written in red at bottom)
- from here you can cycle through the params `[` and `]`, and change the current amount with `<`, `>`. (`FN + <` and `FN + >` change the delta)
- from here you can cycle through the params with `[` and `]`
- `<` and `>` will change the amount of the currnet param. (`FN + <` and `FN + >` will change the delta)
- pressing `■` will exit `SHADER_PARAM` control mode back to `NAV_SHADER`
</details>
@@ -147,12 +151,14 @@ the shader `parameters` are best controlled by _continuous inputs_ ( see user-in
## loop vs parallel playing mode
recur was created to try loop videos seamlessly. it does this by using two video-players and preloading the `NEXT` player while the `NOW` is playing. this is most useful for short samples where a few frames every loop is very noticable. however there are some situations where this is not so important: for example when working with long samples, or when a 1080p video loaded twice maxes out the pi's memory. if you do not require the seamless _switch_ there is now an option `LOOP_TYPE` to choose between _loop_ and _parallel_ .
recur was created to try loop videos seamlessly. it does this by using two video-players and preloading the `NEXT` player while the `NOW` is playing. this is most useful for short samples where a few frames every loop is very noticeable. however there are some situations where this is not so important: for example when working with long samples, or when a 1080p video loaded twice maxes out the pi's memory. if you do not require the seamless _switch_ there is now a new option `LOOP_TYPE` to choose between; _seamless_ and _parallel_ .
- `loop` is the default behaviour described above
- `parallel` : in this mode when the current player finishes it takes a moment to load the next sample itself. there is no `SWITCH` action and pressing a `SLOT` key will start loading the corrosponding sample into this player.
- `seamless` is the default behavior described above
- `parallel` : in this mode when the current player finishes it takes a moment to load the next sample itself. there is no `SWITCH` action and pressing a `SLOT` key will start loading the corresponding sample into this player immediately.
introducing __parallel__ mode also allows the possiblity of having two differnet samples playing at the same time (using roughly the same amount of memory as one in _loop_ mode). to access the second (`NEXT`) player press `FN + ->` (player switch). you can tell which player is selected by the colour of the player bar - yellow for now, cyan for next. with _next_ player selected you can load, seek, toggle_pause the same as normal. pressing the `->` key now will 'switch' which player is displaying. (`FN + ■` can manually toggle_show for the current player)
![parallel_example][parallel_example]
introducing __parallel__ mode also allows the possibility of having two different samples playing at the same time (using roughly the same amount of memory as one in _loop_ mode). to access the second (`NEXT`) player press `FN + ->` (player switch). you can tell which player is selected by the colour of the player bar - yellow for now, cyan for next. with _next_ player selected you can load, seek, toggle_pause the same as normal. pressing the `->` key now will 'switch' which player is displaying. (`FN + ■` can manually toggle_show for the current player)
other forms of _mixing_ between the two players can be done using the `2-input` shaders mentioned above.
</details>
@@ -162,32 +168,47 @@ other forms of _mixing_ between the two players can be done using the `2-input`
## detour demo
d_e_t_o_u_r is a frame-sampler created to address some limitations of sampling with video-files (eg very short loops, instant switching, varying speed and direction). although conceived as a standalone instrument i also wanted (brave) recur users to be able to test it. this is a rough integration with basic (and confusing) ui and crashes (a `RESET_OPENFRAMEWORKS` should recover these) use at your own risk !
d_e_t_o_u_r is a frame-sampler created to address some limitations of sampling with video-files (eg very short loops, instant switching, varying speed and direction). although conceived as a standalone instrument i also wanted (brave) recur users to be able to test it. this is a rough integration with basic (and confusing) ui and some crashes (a `RESET_OPENFRAMEWORKS` should recover these) use at your own risk !
to use detour_demo you must have continuous controls (either midi or i_n_c_u_r pcb). after enabling it in the settings you can cycle to __FRAME_SAMPLER__ with `DSPLY` key. information about the state of the program is displayed here.
a __detour__ is an array of frames (imagine pictures in a flip-book). the __mix-shader__ combines sampler-input (output from recur : can be a video sample playing or capture preview) with the current frame from _detour_.
a __detour__ is an array of frames which, when played back together, simulates video (imagine pictures in a flip-book).
the __mix-shader__ combines _sampler-input_ (output from recur : can be a video sample playing or capture preview) with the _current frame_ from __detour__.
![detour_block][detour_block]
from the __FRAME_SAMPLER__ display:
- pressing `FN + 7` will toggle __FRAME_SAMPLER__ mode on and off
- pressing `■` will _toggle_play_ on the current_detour
- pressing `->` will _toggle_record_ ; this adds the output of _mix-shader_ into the current_detour
- pressing `FN + ->` will _toggle_record_loop_ ; this switches from adding by increasing the size of current_detour _or_ overwriting an existing frame in it
- pressing `FN + ->` will _toggle_record_loop_ ; this switches record between increasing the size of current_detour _or_ overwriting an existing frame in it
- pressing `0, 1, 2, 3` will switch between different detours. for this demo the total number of frames can not exceed 500
- you can select the _mix-shader_ type with `[` and `]` (it reads from your `2-input` folder)
- you can select the _mix-shader_ type with `[` and `]` (it reads from recurs `2-input` folder)
- `a1` (analog input 1) will mix between the _sampler-input_ and the _current_detour_ (`FN + [` and `FN + ]` are shortcuts for mix=0 and mix=1)
- `a2` will set the _velocity_ of the detour if playing or _position_ if paused
- `a3` will set the _start_ frame of current detour
- `a4` will set the _end_ frame of current detour
![detour_example][detour_example]
this program uses the _mix_shader_ to select the input. there is also the option to use a `1-input` shader in this chain - either `before` the mix (only on _sampler-input_) or `after` (nice for feedbacky effects). this shader can be selected and toggled in the usual `SHADER` display.
</details>
[json file]: ../json_objects/keypad_action_mapping.json
[midi-map]: ../json_objects/midi_action_mapping.json
[build guide]: incur_circuit_docs.md
[3.5mm trrs]: https://www.adafruit.com/product/2881
[display_image]: display_parts.jpg
[player_example]: player_example.jpg
[browser_example]: browser_example.jpg
[sampler_example]: sampler_example.jpg
[settings_example]: settings_example.jpg
[display_image]: operating_examples/display_parts.jpg
[player_example]: operating_examples/player_example.jpg
[browser_example]: operating_examples/browser_example.jpg
[sampler_example]: operating_examples/sampler_example.jpg
[settings_example]: operating_examples/settings_example.jpg
[keys]: ./vectorfront_keys.png
[message_example]: ./message_example.jpg
[message_example]: operating_examples/message_example.jpg
[capture_example]: operating_examples/capture_example.jpg
[midi_example]: operating_examples/midi_example.jpg
[parallel_example]: operating_examples/parallel_example.jpg
[detour_example]: operating_examples/detour_example.jpg
[cheap ezycap]: https://www.aliexpress.com/item/32885712014.html
[The Book of Shaders]: https://thebookofshaders.com/
[detour_block]: operating_examples/DETOUR-block.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -18,7 +18,7 @@
version="1.1"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="vectorfront_keys.svg"
inkscape:export-filename="D:\Leo\gitrepos\r_e_c_u_r\documentation\vectorfront.png"
inkscape:export-filename="C:\r_e_c_u_r\documentation\vectorfront_keys.png"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160">
<defs
@@ -1008,9 +1008,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="442.03064"
inkscape:cy="305.64608"
inkscape:zoom="0.58"
inkscape:cx="257.25389"
inkscape:cy="201.44271"
inkscape:document-units="mm"
inkscape:current-layer="layer2"
showgrid="false"
@@ -1120,7 +1120,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -1695,39 +1695,39 @@
id="g6752-1"
style="stroke-width:1.01137185">
<flowRoot
transform="translate(14.453125,-13.28125)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="translate(14.453125,-9.4886057)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot6734-69"
xml:space="preserve"><flowRegion
id="flowRegion6736-8"
style="fill:#000000;stroke:#000000;stroke-width:1.01137185px"><rect
style="text-align:center;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:1.01137185px"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.01137185px;stroke-opacity:1"><rect
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.01137185px;stroke-opacity:1"
y="578.89166"
x="263.90564"
height="22.551781"
width="44.210621"
id="rect6738-1" /></flowRegion><flowPara
style="font-size:20px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:1.01137185px"
id="flowPara6740-33">a</flowPara></flowRoot> <path
style="font-size:17.69900894px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.01137185px;stroke-opacity:1"
id="flowPara6740-33">⦿</flowPara></flowRoot> <path
inkscape:connector-curvature="0"
id="path6742-37"
d="m 283.69141,593.61167 h 33.39844"
style="fill:url(#linearGradient4761);fill-rule:evenodd;stroke:url(#linearGradient4761);stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<flowRoot
transform="translate(169.59514,-8.679611)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#5fffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="flowRoot6744-9"
xml:space="preserve"><flowRegion
id="flowRegion6746-86"
style="fill:#000000;stroke-width:1.01137185px"><rect
style="text-align:center;text-anchor:middle;fill:#000000;stroke-width:1.01137185px"
style="fill:#ffffff;fill-opacity:1;stroke:#5fffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><rect
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#5fffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
y="601.71594"
x="108.77582"
height="15.195512"
width="44.246517"
id="rect6748-7" /></flowRegion><flowPara
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-0">cmd</flowPara></flowRoot> </g>
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#5fffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="flowPara6750-0">rec</flowPara></flowRoot> </g>
<g
transform="translate(68.076575,62.410189)"
id="g6752-84"
@@ -1883,7 +1883,9 @@
<g
transform="translate(0.19736362,194.84494)"
id="g6752-2"
style="stroke-width:1.01137185">
style="stroke-width:1.01137185"
inkscape:export-xdpi="160"
inkscape:export-ydpi="160">
<flowRoot
transform="translate(14.453125,-13.28125)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
@@ -1905,19 +1907,19 @@
style="fill:url(#linearGradient4761);fill-rule:evenodd;stroke:url(#linearGradient4761);stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<flowRoot
transform="translate(169.59514,-12.429611)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot6744-22"
xml:space="preserve"><flowRegion
id="flowRegion6746-16"
style="fill:#000000;stroke-width:1.01137185px"><rect
style="text-align:center;text-anchor:middle;fill:#000000;stroke-width:1.01137185px"
style="fill:#ffffff;fill-opacity:1;stroke-width:1.01137185px"><rect
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.01137185px"
y="601.71594"
x="108.77582"
height="15.195512"
width="44.246517"
id="rect6748-30" /></flowRegion><flowPara
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-21">cmd</flowPara></flowRoot> </g>
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-21">mirror</flowPara></flowRoot> </g>
<g
transform="translate(68.076575,194.84494)"
id="g6752-65"
@@ -1942,20 +1944,20 @@
d="m 283.69141,589.86167 h 33.39844"
style="fill:url(#linearGradient4761);fill-rule:evenodd;stroke:url(#linearGradient4761);stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<flowRoot
transform="translate(169.59514,-12.429611)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="translate(169.59514,-12.020921)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35836011;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="flowRoot6744-8"
xml:space="preserve"><flowRegion
id="flowRegion6746-95"
style="fill:#000000;stroke-width:1.01137185px"><rect
style="text-align:center;text-anchor:middle;fill:#000000;stroke-width:1.01137185px"
style="fill:#000000;stroke-width:0.35836011;stroke-miterlimit:4;stroke-dasharray:none"><rect
style="text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.35836011;stroke-miterlimit:4;stroke-dasharray:none"
y="601.71594"
x="108.77582"
height="15.195512"
width="44.246517"
id="rect6748-060" /></flowRegion><flowPara
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-83">cmd</flowPara></flowRoot> </g>
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35836011;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="flowPara6750-83">shader</flowPara></flowRoot> </g>
<g
transform="translate(135.95576,194.84494)"
id="g6752-82"
@@ -1980,7 +1982,7 @@
d="m 283.69141,589.86167 h 33.39844"
style="fill:url(#linearGradient4761);fill-rule:evenodd;stroke:url(#linearGradient4761);stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<flowRoot
transform="translate(169.59514,-12.429611)"
transform="translate(169.59514,-11.350669)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01137185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot6744-23"
xml:space="preserve"><flowRegion
@@ -1992,8 +1994,8 @@
height="15.195512"
width="44.246517"
id="rect6748-77" /></flowRegion><flowPara
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-76">cmd</flowPara></flowRoot> </g>
style="font-size:10px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.01137185px"
id="flowPara6750-76">frames</flowPara></flowRoot> </g>
<g
transform="translate(203.83497,194.84494)"
id="g6752-11"

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB