Qudio documentation

This commit is contained in:
2019-01-21 15:18:17 +01:00
parent db8e6eaac1
commit 2580fdb941
80 changed files with 130 additions and 24 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

+127 -21
View File
@@ -7,7 +7,7 @@
<meta property="og:url" content="http://tilman.de/projekte/qudio/" />
<meta property="og:title" content="Qudio - a QR-enabled Audio Player for Children" />
<meta property="og:description" content="After building the first version of this music player for my oldest son in 2016, I recently had to update my project for his younger brother. As before, music can be played by simply placing a card with a QR code on the player. The new version has a improved case and is cheaper and easier to build. Internally it uses the volumio player which allows to not only play all MP3s from the local network, but also to connect streaming services like Spotify. Oh, an there is a rocket again, too. But this time it is optional." />
<meta property="og:description" content="After building the first version of this music player for my oldest son in 2016, I recently had to update my project for his younger brother. As before, music can be played by simply placing a card with a QR code on the player. The new version has an improved case and is cheaper and easier to build. Internally it uses the volumio player which allows to not only play all MP3s from the local network, but also to connect streaming services like Spotify. Oh, an there is a rocket again, too. But this time it is optional." />
<meta property="og:image" content="http://tilman.de/projekte/qudio/images/qudio-01-space.jpg" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.6/dist/jquery.fancybox.min.css" />
@@ -68,10 +68,6 @@ h2, h3, h4 {
margin-top: 2em;
}
a > img {
margin: 2em;
}
.fancybox-title {
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
@@ -92,13 +88,12 @@ a > img {
<h1>Qudio Player</h1>
<p id="subtitle">An easy-to-use music player for children based on the Raspberry Pi Zero and the JBL On Stage IIIp (again)</p>
<p class="well" style="text-align: center;">In spring 2016 I finalized the <a href="http://tilman.de/projekte/musikrakete/">&quot;Musikrakete&quot;</a>, an MP3 player that our boys could operate without assistance. Later on, there was a <a href="http://www.tilman.de/projekte/audiosphere/">second version</a>. This is the third version, with all of the improvements I came up with during the last three years. It is easier and cheaper to build, the case is way smaller and much more robust and by switching to volumio the player now supports remote control from the phone and streaming services like Spotify. This is all combined with the existing features like playing MP3s from the local network and, most importantly, being easy to use even for small children. So if your children love music and audio books just like mine, this might be a project for you.</p>
<p class="well" style="text-align: center;">In spring 2016 I finalized the <a href="http://tilman.de/projekte/musikrakete/">&quot;Musikrakete&quot;</a>, a music player that our boys could operate without assistance. Later on, there was a <a href="http://www.tilman.de/projekte/audiosphere/">second version</a>. This is the third version, with all of the improvements I came up with during the last three years. It is easier and cheaper to build, the case is way smaller and much more robust. By switching to volumio the player now supports remote control from the phone and streaming services like Spotify. This is all combined with the existing features like playing MP3s from the local network and, most importantly, being easy to use even for small children. So if your children love music and audio books just like mine, this might be a project for you.</p>
<h2 id="history">The Idea</h2>
<a data-fancybox style="float:right;" href="images/qudio-01-space.jpg" data-caption="The Qudio player (with the additional rocket). The QR cards are placed on the window on top of the case, where they are detected by a photo sensor that triggers the recognition process. After the code has been read by the webcam, the stream or MP3s it point to start playing."><img src="images/qudio-01-space.jpg"
<a data-fancybox style="float:right;margin: 2em;" href="images/qudio-01-space.jpg" data-caption="The Qudio player (with the additional rocket). The QR cards are placed on the window on top of the case, where they are detected by a photo sensor that triggers the recognition process. After the code has been read by the webcam, the stream or MP3s it point to start playing."><img src="images/qudio-01-space.jpg"
width="480" alt="The Qudio player (with the additional rocket). The QR cards are placed on the window on top of the case, where they are detected by a photo sensor that triggers the recognition process. After the code has been read by the webcam, the stream or MP3s it point to start playing." /></a>
</p>
<p>
This project started in 2016, when Anica asked me if buying a <a href="https://de-de.hoerbert.com/">hörbert</a> MP3 player would be a good idea. At the time our boys wasted two to three CDs every week, trying to get some music out of the small player in their room. And the player in the living room also seemed to reach its end of life pretty soon due to their enthusiasm. Still I wasn't too sure about this hörbert thing. In order to get new files on the SD card of the player, the case had to be opened, the navigation with 11 buttons seemed a little confusing and a single speaker operated with four batteries also did not seem promising to me.
@@ -121,13 +116,14 @@ a > img {
</p>
<div style="margin: 2em; text-align: center;">
<video controls><source src="Video to follow" type="video/mp4" /></video>
<em>TODO - Short intro video</em>
<!--video controls><source src="Video to follow" type="video/mp4" /></video-->
</div>
<h2 id="piplayer3">PiPlayer 3.0: Qudio</h2>
<p>
This third version now relies on <a href="https://volumio.org/">volumio</a> which can play music from streaming services like Spotify Premium or LastFM, has a nice web interface and does most of the configuration for us. The case is much smaller than before, which makes it sturdier and easier to print. The electronic parts are all easily obtainable standard compontents and even cheaper than before. Again, it is built on top of the JBL On Stage IIIp speaker, that can still be found on ebay for little money and provides a perfect base for a player like this.
This third version now relies on <a href="https://volumio.org/">volumio</a> which can play music from streaming services like Spotify Premium or LastFM, has a nice web interface and makes configuration easy. The case is much smaller than before, which makes it sturdier and easier to print. The electronic parts are all easily obtainable standard compontents and even cheaper than before. Again, it is built on top of the JBL On Stage IIIp speaker, that can still be found on ebay for little money and provides a perfect base for a player like this.
</p>
<p>
@@ -154,49 +150,159 @@ a > img {
<li>Soldering iron, drill, screwdriver, glue gun, box cutter</li>
</ul>
<pre style="background-color:#ffff66">
deactivate microphone?
12 mm caps?
acrylic glass --> size?
</pre>
<h2 id="components">Assembling the Components</h2>
<h3 id="mount">Mounting the Base</h3>
<h3 id="mount">Preparing Speaker and Printed Case</h3>
<h4 id="jbl">Disassembling the JBL and Mounting the Bottom of the Case</h4>
<p>
In order to mount the case on the JBL, we have to disassemble the speaker and drill some holes. The screw in the center is hidden in the battery case, while the eight others are hidden under the rubber pads. Just peel them off carefully, we can glue them back on later.
</p>
IMG_20181211_094955_cr
<p>
After removing the screws you can upen up the case. The circuit board is fastened with another four screws that have to be removed. Then the board can be pulled out of the case carefully. The power button of the speaker is the most sensitive part here. To make life easier, you can also pull off the speaker cables from the board. Now the cover is completely separated from the bottom and the circuit board.
</p>
<p>
The next step is to drill the three mounting holes into the cover, for which you can use <a href="misc/JBL_screws_drilling_template.pdf">this template</a>. Finally, we need to mount the base of the printed case to the speaker case using thee M3 screws with nuts. Afterwards, we can put the circuit board back in the case and put all the screws back in place.
</p>
<p class="gallery">
<!--a href="images/IMG_20181211_093736_cr.jpg" data-fancybox="mounting" data-caption="The backside of the JBL speaker. The screws are hidden under the rubber pads and in the battery case."><img src="images/IMG_20181211_093736_cr.jpg"
width="320" alt="The backside of the JBL speaker. The screws are hidden under the rubber pads and in the battery case." /></a-->
<a href="images/IMG_20181211_094955_cr.jpg" data-fancybox="mounting" data-caption="The rubber pads can be peeled off the speaker bottom. Remove all glue residues. The pads can be glued back on later."><img src="images/IMG_20181211_094955_cr.jpg"
width="320" alt="The rubber pads can be peeled off the speaker bottom. Remove all glue residues. The pads can be glued back on later." /></a>
<a href="images/IMG_20181211_100827_cr.jpg" data-fancybox="mounting" data-caption="Carefully remove the circuit board from the case"><img src="images/IMG_20181211_100827_cr.jpg"
width="320" alt="Carefully remove the circuit board from the case" /></a>
<a href="images/IMG_20181211_113036_cr.jpg" data-fancybox="mounting" data-caption="Drilling the holes using the template"><img src="images/IMG_20181211_113036_cr.jpg"
width="320" alt="Drilling the holes using the template" /></a>
</p>
<p class="gallery">
<a href="images/IMG_20181211_113151_cr.jpg" data-fancybox="mounting" data-caption="The speaker case with the mounting holes"><img src="images/IMG_20181211_113151_cr.jpg"
width="320" alt="The speaker case with the mounting holes" /></a>
<a href="images/IMG_20181211_113620_cr.jpg" data-fancybox="mounting" data-caption="Attaching the printed base"><img src="images/IMG_20181211_113620_cr.jpg"
width="320" alt="Attaching the printed base" /></a>
<a href="images/IMG_20181211_114121_cr.jpg" data-fancybox="mounting" data-caption="The JBL case before reassembly"><img src="images/IMG_20181211_114121_cr.jpg"
width="320" alt="The JBL case before reassembly" /></a>
</p>
<h4 id="inserts">Putting the Threaded Inserts into the Printed Parts</h4>
<p>
Now is also a good moment to put the threaded inserts into the printed parts. This is done by carefully pushing them into the plastic with a heated soldering iron. As soon as the plastic has cooled down, the inserts will stay in place and allow to close and open the connections without tearing the plastic apart. This <a href="https://www.3dhubs.com/knowledge-base/how-assemble-3d-printed-parts-threaded-fasteners#inserts">video on 3Dhubs shows how it is done</a>.
</p>
<p>
We put two M3 inserts into the bottom of the case, one into the cover to hold the TCRT5000 sensor and the remaining two into the curb that goes on top of the case.
</p>
<p class="gallery">
<a href="images/IMG_20181212_091832_cr.jpg" data-fancybox data-caption="The printed curb after adding two threaded inserts with a soldering iron"><img src="images/IMG_20181212_091832_cr.jpg"
width="320" alt="The printed curb after adding two threaded inserts with a soldering iron" /></a>
</p>
<h4 id="inserts">Installing the Window</h4>
<p>
For the window on top of the case, we need to cut a XX mm &times XX mm part of acrylic glass. This can be done with a normal cutter knife by (carefully!) repeatedly cutting along your marker line with a ruler until you can break it off. You might need to file the edges a bit until it fits into the slot inside the cover.
</p>
<p>
When the glass fits into the case, point through the screw holes to mark where you have to drill. The acrylic glass can then be drilled just like the speaker case in the first step.
</p>
<p class="gallery">
<a href="images/IMG_20181211_122139_cr.jpg" data-fancybox data-caption="The printed curb after adding two threaded inserts with a soldering iron"><img src="images/IMG_20181211_122139_cr.jpg"
width="320" alt="The printed curb after adding two threaded inserts with a soldering iron" /></a>
</p>
<h3 id="wiring">Wiring</h3>
<h4 id="audio-module">Audio Module</h3>
<p>
Test 1, 2, 3
If you are also using the CMJCU-5102 module, you will have to <a href="https://blog.sengotta.net/connecting-a-pcm5102a-breakout-board-to-a-raspberry-pi/">pull the XMT pin to high by connecting it to the 3.3V pin via a 10 k&#8486; resistor.</a> This will unmute the audio output. Also, the FLT, DMT, SCL and FMT pins should be connected to the module's GND pin on the backside. That way, only a single cable connection to GND on the Raspberry Pi is needed.
</p>
<p>
The other pins are connected to the Raspberry Pi as follows:
</p>
<ul>
<li>VCC &harr; pin 2 (5V)</li>
<li>GND &harr; pin 6 (GND)</li>
<li>FLT &harr; GND</li>
<li>DMP &harr; GND</li>
<li>SCL &harr; GND</li>
<li>BCK &harr; pin 12 (GPIO 18)</li>
<li>DIN &harr; pin 40 (GPIO 21)</li>
<li>LCK &harr; pin 35 (GPIO 19)</li>
<li>FMT &harr; GND</li>
<li>XMT &harr; 10k Resistor <> 3,3V of the PCM5102A board</li>
</ul>
<p class="gallery">
<a href="images/IMG_20181214_084813_cr.jpg" data-fancybox data-caption="The CJMCU-5102 audio module needs a 10 k&#8486; resistor between XMT and 3.3V to unmute. I just soldered the biggest one I had directly on the board. The FLT, DMT, SCL and FMT pins are all connected to the GND pin on the backside."><img src="images/IMG_20181214_084813_cr.jpg"
width="320" alt="The CJMCU-5102 audio module needs a 10 k&#8486; resistor between XMT and 3.3V to unmute. I just soldered the biggest one I had directly on the board. The FLT, DMT, SCL and FMT pins are all connected to the GND pin on the backside." /></a>
</p>
<h4 id="buttons">Buttons</h3>
<p>
The three buttons go directly in the small pockets on the bottom part of the printed case. While the front pins are put into the small holes in order to fasten them tightly, the pins on the other end should be bent up into a horizontal position. We can easily solder them to jumper cables there and connect to the Raspberry Pi. Connect the buttons to pins 9 (for PREV), 10 (for PLAY/PAUSE) and 11 (for NEXT). The other sides go to the ground pins 20, 30 and 34.
</p>
<h4 id="sensor">Sensor</h3>
<p>
The TCRT5000 sensor module is connected as follows:
</p>
<ul>
<li>VCC &harr; pin 4 (5V)</li>
<li>GND &harr; pin 14 (GND)</li>
<li>DO &harr; 29 (GPIO 5)</li>
</ul>
<p>
The pins of the module need to be bent up to fit in the case. (For some reason all the modules have 90 degree pins.) We can then use the M3 screw hole to fasten it to the top. The little potentiometer on board allows to adjust the sensitivity of the sensor in place.
</p>
<p>
My sensor permanently fired whenever if tightened the scew. Apparently the threaded insert connected two of the pins. I solved this by covering the pins on the back side with some hot glue.
</p>
<p>
The next problem was a little red LED on the module that was permanently on when the sensor was powered. While being tiny, it put the whole printed case in a permanent red glow that did not look pretty and also would have been disturbing given that the player was to be put on a nightstand. I bypassed the LED with a tiny piece of wire that you can see in the pictures.
</p>
<p class="gallery">
<!--a href="images/IMG_20181214_132419_cr.jpg" data-fancybox="sensor" data-caption=""><img src="images/IMG_20181214_132419_cr.jpg"
width="320" alt="" /></a-->
<a href="images/IMG_20181214_103426_cr.jpg" data-fancybox="sensor" data-caption="With the small wire replacing the red LED the permanent glow was stopped"><img src="images/IMG_20181214_103426_cr.jpg"
width="320" alt="With the small wire replacing the red LED the permanent glow was stopped" /></a>
<!--a href="images/IMG_20181214_083437_cr.jpg" data-fancybox="sensor" data-caption=""><img src="images/IMG_20181214_083437_cr.jpg"
width="320" alt="" /></a-->
<a href="images/IMG_20181214_132353_cr.jpg" data-fancybox="sensor" data-caption="Some hot glue on the back of the pins prevents the brass insert from shortening them"><img src="images/IMG_20181214_132353_cr.jpg"
width="320" alt="Some hot glue on the back of the pins prevents the brass insert from shortening them" /></a>
<a href="images/IMG_20181212_092149_cr.jpg" data-fancybox="sensor" data-caption="The pins on the sensor board have to be bent up before fastening it inside the cover"><img src="images/IMG_20181212_092149_cr.jpg"
width="320" alt="The pins on the sensor board have to be bent up before fastening it inside the cover" /></a>
</p>
<h4 id="led">LED</h3>
<p>
The led is put in the small holder at the front side inside the cover. Connect the long leg to pin 15 (GPIO 22) of the Raspberry Pi (with a resistor in between, if needed), the short one to pin 9 (GND). I dimmed the LED with a 100 &#8486; resistor even though it could work on 3.3 V because it was just too bright.
</p>
<h2 id="software">Software Installation and Configuration</h2>
<h3 id="volumio">Volumio</h3>

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before

Width:  |  Height:  |  Size: 635 KiB

After

Width:  |  Height:  |  Size: 635 KiB

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before

Width:  |  Height:  |  Size: 654 KiB

After

Width:  |  Height:  |  Size: 654 KiB

Before

Width:  |  Height:  |  Size: 617 KiB

After

Width:  |  Height:  |  Size: 617 KiB

Before

Width:  |  Height:  |  Size: 550 KiB

After

Width:  |  Height:  |  Size: 550 KiB

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 644 KiB

After

Width:  |  Height:  |  Size: 644 KiB

Before

Width:  |  Height:  |  Size: 860 KiB

After

Width:  |  Height:  |  Size: 860 KiB

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 906 KiB

After

Width:  |  Height:  |  Size: 906 KiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 525 KiB

After

Width:  |  Height:  |  Size: 525 KiB

Before

Width:  |  Height:  |  Size: 575 KiB

After

Width:  |  Height:  |  Size: 575 KiB

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before

Width:  |  Height:  |  Size: 657 KiB

After

Width:  |  Height:  |  Size: 657 KiB

Before

Width:  |  Height:  |  Size: 760 KiB

After

Width:  |  Height:  |  Size: 760 KiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before

Width:  |  Height:  |  Size: 808 KiB

After

Width:  |  Height:  |  Size: 808 KiB

Before

Width:  |  Height:  |  Size: 662 KiB

After

Width:  |  Height:  |  Size: 662 KiB

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Before

Width:  |  Height:  |  Size: 2.4 MiB

After

Width:  |  Height:  |  Size: 2.4 MiB

Before

Width:  |  Height:  |  Size: 446 KiB

After

Width:  |  Height:  |  Size: 446 KiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 737 KiB

After

Width:  |  Height:  |  Size: 737 KiB

Before

Width:  |  Height:  |  Size: 609 KiB

After

Width:  |  Height:  |  Size: 609 KiB

Before

Width:  |  Height:  |  Size: 725 KiB

After

Width:  |  Height:  |  Size: 725 KiB

Before

Width:  |  Height:  |  Size: 723 KiB

After

Width:  |  Height:  |  Size: 723 KiB

Before

Width:  |  Height:  |  Size: 632 KiB

After

Width:  |  Height:  |  Size: 632 KiB

Before

Width:  |  Height:  |  Size: 590 KiB

After

Width:  |  Height:  |  Size: 590 KiB

Before

Width:  |  Height:  |  Size: 885 KiB

After

Width:  |  Height:  |  Size: 885 KiB

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Before

Width:  |  Height:  |  Size: 544 KiB

After

Width:  |  Height:  |  Size: 544 KiB

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 498 KiB

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 981 KiB

After

Width:  |  Height:  |  Size: 981 KiB

Before

Width:  |  Height:  |  Size: 800 KiB

After

Width:  |  Height:  |  Size: 800 KiB

Before

Width:  |  Height:  |  Size: 1002 KiB

After

Width:  |  Height:  |  Size: 1002 KiB

Before

Width:  |  Height:  |  Size: 777 KiB

After

Width:  |  Height:  |  Size: 777 KiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 668 KiB

After

Width:  |  Height:  |  Size: 668 KiB

Before

Width:  |  Height:  |  Size: 646 KiB

After

Width:  |  Height:  |  Size: 646 KiB

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 766 KiB

After

Width:  |  Height:  |  Size: 766 KiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 448 KiB

After

Width:  |  Height:  |  Size: 448 KiB

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 328 KiB

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 335 KiB

Before

Width:  |  Height:  |  Size: 690 KiB

After

Width:  |  Height:  |  Size: 690 KiB

Before

Width:  |  Height:  |  Size: 945 KiB

After

Width:  |  Height:  |  Size: 945 KiB

Before

Width:  |  Height:  |  Size: 574 KiB

After

Width:  |  Height:  |  Size: 574 KiB