diff options
Diffstat (limited to 'projects')
-rw-r--r-- | projects/8seg/index.html | 2 | ||||
-rw-r--r-- | projects/gerbolyze/index.html | 4 | ||||
-rw-r--r-- | projects/gerbonara/index.html | 4 | ||||
-rw-r--r-- | projects/index.html | 2 | ||||
-rw-r--r-- | projects/index.xml | 50 | ||||
-rw-r--r-- | projects/kimesh/index.html | 2 | ||||
-rw-r--r-- | projects/lolcat-c/index.html | 2 | ||||
-rw-r--r-- | projects/python-mpv/index.html | 66 | ||||
-rw-r--r-- | projects/svg-flatten/index.html | 2 | ||||
-rw-r--r-- | projects/wsdiff/index.html | 2 |
10 files changed, 52 insertions, 84 deletions
diff --git a/projects/8seg/index.html b/projects/8seg/index.html index 78ea10b..abd5b65 100644 --- a/projects/8seg/index.html +++ b/projects/8seg/index.html @@ -50,7 +50,7 @@ variety of spaces, conforming to the space's size and shape through bending and <p>By popular request, you can find 3D models for the printable parts of the power supply enclosures <a class="reference external" href="https://www.printables.com/model/695260-parametric-flexible-aluminium-profile-case">here</a></p> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/gerbolyze/index.html b/projects/gerbolyze/index.html index fb6878e..665545e 100644 --- a/projects/gerbolyze/index.html +++ b/projects/gerbolyze/index.html @@ -69,7 +69,7 @@ anime silkscreen.</p> <p>Gerbolyze is based on <a class="reference external" href="https://gitlab.com/gerbolyze/gerbonara">gerbonara</a>.</p> <img alt="pics/process-overview.png" src="pics/process-overview.png" style="width: 800px;" /> <div class="contents topic" id="contents"> -<p class="topic-title">Contents</p> +<p class="topic-title"><a class="reference internal" href="#top">Contents</a></p> <ul class="simple"> <li><a class="reference internal" href="#tl-dr-produce-high-quality-artistic-pcbs-in-three-easy-steps" id="toc-entry-1">Tl;dr: Produce high-quality artistic PCBs in three easy steps!</a></li> <li><a class="reference internal" href="#quick-start-installation-any-platform" id="toc-entry-2">Quick Start Installation (Any Platform)</a></li> @@ -637,7 +637,7 @@ avoid that so the default license is still AGPL.</p> </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/gerbonara/index.html b/projects/gerbonara/index.html index 204c74c..f59b108 100644 --- a/projects/gerbonara/index.html +++ b/projects/gerbonara/index.html @@ -93,7 +93,7 @@ existing Gerber files exported from a normal PCB tool for artistic purposes.</p> </span></pre> <p>Then, you are ready to read and write gerber files:</p> <pre class="code python literal-block"> -<span class="lineno"></span><span class="line"><span class="kn">from</span> <span class="nn">gerbonara</span> <span class="kn">import</span> <span class="n">LayerStack</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="kn">from</span><span class="w"> </span><span class="nn">gerbonara</span><span class="w"> </span><span class="kn">import</span> <span class="n">LayerStack</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">stack</span> <span class="o">=</span> <span class="n">LayerStack</span><span class="o">.</span><span class="n">from_directory</span><span class="p">(</span><span class="s1">'output/gerber'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">stack</span><span class="o">.</span><span class="n">outline</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="s1">'mm'</span><span class="p">)</span><span class="w"></span></span> @@ -152,7 +152,7 @@ some non-standard naming convention.</p> </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/index.html b/projects/index.html index b7daeba..79cc865 100644 --- a/projects/index.html +++ b/projects/index.html @@ -184,7 +184,7 @@ open an issue on the project's issue tracker.</p> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/index.xml b/projects/index.xml index 2742a44..5a88e71 100644 --- a/projects/index.xml +++ b/projects/index.xml @@ -4,7 +4,7 @@ <title>Projects on Home</title> <link>http://jaseg.de/projects/</link> <description>Recent content in Projects on Home</description> - <generator>Hugo -- gohugo.io</generator> + <generator>Hugo</generator> <language>en-us</language> <copyright>Jan Sebastian Götte</copyright> <lastBuildDate>Wed, 04 Oct 2023 23:42:00 +0200</lastBuildDate> @@ -14,88 +14,56 @@ <link>http://jaseg.de/projects/kimesh/</link> <pubDate>Wed, 04 Oct 2023 23:42:00 +0200</pubDate> <guid>http://jaseg.de/projects/kimesh/</guid> - <description><div class="document"> - - -<p>KiMesh is a KiCad plugin that automatically creates security meshes with two or traces covering an arbitrarily-shaped outline on the board.</p> -</div></description> + <description><div class="document">


<p>KiMesh is a KiCad plugin that automatically creates security meshes with two or traces covering an arbitrarily-shaped outline on the board.</p>
</div></description> </item> <item> <title>8seg</title> <link>http://jaseg.de/projects/8seg/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/8seg/</guid> - <description><div class="document"> - - -<p>8seg is an experimental textual display. It is made from a 45m by 1.5m large lacework banner that can be put up in a variety of spaces, conforming to the space's size and shape through bending and folding.</p> -</div></description> + <description><div class="document">


<p>8seg is an experimental textual display. It is made from a 45m by 1.5m large lacework banner that can be put up in a variety of spaces, conforming to the space's size and shape through bending and folding.</p>
</div></description> </item> <item> <title>Gerbolyze</title> <link>http://jaseg.de/projects/gerbolyze/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/gerbolyze/</guid> - <description><div class="document"> - - -<p>Gerbolyze is a tool that allows the modification of Gerber PCB artwork with a vector graphics editor like Inkscape. Gerbolyze directly converts between SVG and Gerber, and accurately reproduces details that other tools can not.</p> -</div></description> + <description><div class="document">


<p>Gerbolyze is a tool that allows the modification of Gerber PCB artwork with a vector graphics editor like Inkscape. Gerbolyze directly converts between SVG and Gerber, and accurately reproduces details that other tools can not.</p>
</div></description> </item> <item> <title>Gerbonara</title> <link>http://jaseg.de/projects/gerbonara/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/gerbonara/</guid> - <description><div class="document"> - - -<p>Gerbonara is a user-friendly, powerful tool for reading, writing, modification and rendering of Gerber PCB artwork from the command line or from Python code. Gerbonara supports the Gerber dialects of all industry-standard EDA tools.</p> -</div></description> + <description><div class="document">


<p>Gerbonara is a user-friendly, powerful tool for reading, writing, modification and rendering of Gerber PCB artwork from the command line or from Python code. Gerbonara supports the Gerber dialects of all industry-standard EDA tools.</p>
</div></description> </item> <item> <title>lolcat-c</title> <link>http://jaseg.de/projects/lolcat-c/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/lolcat-c/</guid> - <description><div class="document"> - - -<p>lolcat-c is a small, high-performance re-implementation of the <a class="reference external" href="https://github.com/busyloop/lolcat">lolcat</a> rainbow cat utility. lolcat-c is meant as a lolcat that you can actually use in production. It is fast, not slowing down whatever you pipe through it, and it robustly handles real-world terminal output including escape sequences.</p> -</div></description> + <description><div class="document">


<p>lolcat-c is a small, high-performance re-implementation of the <a class="reference external" href="https://github.com/busyloop/lolcat">lolcat</a> rainbow cat utility. lolcat-c is meant as a lolcat that you can actually use in production. It is fast, not slowing down whatever you pipe through it, and it robustly handles real-world terminal output including escape sequences.</p>
</div></description> </item> <item> <title>python-mpv</title> <link>http://jaseg.de/projects/python-mpv/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/python-mpv/</guid> - <description><div class="document"> - - -<p>python-mpv is a small, ctypes-based Python library wrapping the libmpv media player library. Despite its small size and simple API, python-mpv allows advanced control over libmpv and beyond simple remote control of mpv can be used to embed mpv in OpenGL, Qt, and GTK-based Python applications.</p> -</div></description> + <description><div class="document">


<p>python-mpv is a small, ctypes-based Python library wrapping the libmpv media player library. Despite its small size and simple API, python-mpv allows advanced control over libmpv and beyond simple remote control of mpv can be used to embed mpv in OpenGL, Qt, and GTK-based Python applications.</p>
</div></description> </item> <item> <title>svg-flatten</title> <link>http://jaseg.de/projects/svg-flatten/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/svg-flatten/</guid> - <description><div class="document"> - - -<p>svg-flatten is a command-line utility that performs vector occlusion and clipping on SVG files, producing a flattened SVG file without overlapping elements, without changing what the file looks like. svg-flatten is used as a part of gerbolyze.</p> -</div></description> + <description><div class="document">


<p>svg-flatten is a command-line utility that performs vector occlusion and clipping on SVG files, producing a flattened SVG file without overlapping elements, without changing what the file looks like. svg-flatten is used as a part of gerbolyze.</p>
</div></description> </item> <item> <title>wsdiff</title> <link>http://jaseg.de/projects/wsdiff/</link> <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> <guid>http://jaseg.de/projects/wsdiff/</guid> - <description><div class="document"> - - -<p>wsdiff is a command-line utility that produces self-contained, syntax-highlighted, HTML-formatted diffs that support both unified and side-by-side diffs from a single source file using nothing but CSS magic.</p> -</div></description> + <description><div class="document">


<p>wsdiff is a command-line utility that produces self-contained, syntax-highlighted, HTML-formatted diffs that support both unified and side-by-side diffs from a single source file using nothing but CSS magic.</p>
</div></description> </item> </channel> </rss> diff --git a/projects/kimesh/index.html b/projects/kimesh/index.html index 33c9ef5..e0bdf03 100644 --- a/projects/kimesh/index.html +++ b/projects/kimesh/index.html @@ -91,7 +91,7 @@ higher-numbered pins are.</p> </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/lolcat-c/index.html b/projects/lolcat-c/index.html index 98ac3f0..b42e5df 100644 --- a/projects/lolcat-c/index.html +++ b/projects/lolcat-c/index.html @@ -119,7 +119,7 @@ </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/python-mpv/index.html b/projects/python-mpv/index.html index 7df1dd7..ef93dfe 100644 --- a/projects/python-mpv/index.html +++ b/projects/python-mpv/index.html @@ -85,7 +85,7 @@ since right now there is not many OSX users.</p> <div class="section" id="usage"> <h2>Usage</h2> <pre class="code python literal-block"> -<span class="lineno"></span><span class="line"><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">(</span><span class="n">ytdl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="s1">'https://youtu.be/DOmdB7D-pUU'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span><span class="o">.</span><span class="n">wait_for_playback</span><span class="p">()</span> @@ -108,16 +108,16 @@ that can be passed to an event loop to tell it to wake up the python-mpv event h <h4>Logging, Properties, Python Key Bindings, Screenshots and youtube-dl</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">my_log</span><span class="p">(</span><span class="n">loglevel</span><span class="p">,</span> <span class="n">component</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">my_log</span><span class="p">(</span><span class="n">loglevel</span><span class="p">,</span> <span class="n">component</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="nb">print</span><span class="p">(</span><span class="s1">'[</span><span class="si">{}</span><span class="s1">] </span><span class="si">{}</span><span class="s1">: </span><span class="si">{}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">loglevel</span><span class="p">,</span> <span class="n">component</span><span class="p">,</span> <span class="n">message</span><span class="p">))</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">(</span><span class="n">log_handler</span><span class="o">=</span><span class="n">my_log</span><span class="p">,</span> <span class="n">ytdl</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">input_default_bindings</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">input_vo_keyboard</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="c1"># Property access, these can be changed at runtime</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="nd">@player</span><span class="o">.</span><span class="n">property_observer</span><span class="p">(</span><span class="s1">'time-pos'</span><span class="p">)</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">time_observer</span><span class="p">(</span><span class="n">_name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">time_observer</span><span class="p">(</span><span class="n">_name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="c1"># Here, _value is either None if nothing is playing or a float containing</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="c1"># fractional seconds since the beginning of the file.</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Now playing at </span><span class="si">{:.2f}</span><span class="s1">s'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="p">))</span><span class="w"></span></span> @@ -128,11 +128,11 @@ that can be passed to an event loop to tell it to wake up the python-mpv event h <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span><span class="p">[</span><span class="s1">'vo'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'gpu'</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="nd">@player</span><span class="o">.</span><span class="n">on_key_press</span><span class="p">(</span><span class="s1">'q'</span><span class="p">)</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">my_q_binding</span><span class="p">():</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">my_q_binding</span><span class="p">():</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="nb">print</span><span class="p">(</span><span class="s1">'THERE IS NO ESCAPE'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="nd">@player</span><span class="o">.</span><span class="n">on_key_press</span><span class="p">(</span><span class="s1">'s'</span><span class="p">)</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">my_s_binding</span><span class="p">():</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">my_s_binding</span><span class="p">():</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">pillow_img</span> <span class="o">=</span> <span class="n">player</span><span class="o">.</span><span class="n">screenshot_raw</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">pillow_img</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">'screenshot.png'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> @@ -148,17 +148,17 @@ that can be passed to an event loop to tell it to wake up the python-mpv event h the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on github (#202) for the original code!</p> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">sys</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">p</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">p</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">skip_silence</span><span class="p">():</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">skip_silence</span><span class="p">():</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">p</span><span class="o">.</span><span class="n">set_loglevel</span><span class="p">(</span><span class="s1">'debug'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">p</span><span class="o">.</span><span class="n">af</span> <span class="o">=</span> <span class="s1">'lavfi=[silencedetect=n=-20dB:d=1]'</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">p</span><span class="o">.</span><span class="n">speed</span> <span class="o">=</span> <span class="mi">100</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">evt</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span><span class="w"> </span><span class="nf">check</span><span class="p">(</span><span class="n">evt</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">toks</span> <span class="o">=</span> <span class="n">evt</span><span class="p">[</span><span class="s1">'event'</span><span class="p">][</span><span class="s1">'text'</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">if</span> <span class="s1">'silence_end:'</span> <span class="ow">in</span> <span class="n">toks</span><span class="p">:</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="w"></span></span> @@ -174,9 +174,9 @@ the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on g <h4>Video overlays</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">time</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span><span class="p">,</span> <span class="n">ImageDraw</span><span class="p">,</span> <span class="n">ImageFont</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">time</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span><span class="w"> </span><span class="nn">PIL</span><span class="w"> </span><span class="kn">import</span> <span class="n">Image</span><span class="p">,</span> <span class="n">ImageDraw</span><span class="p">,</span> <span class="n">ImageFont</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> @@ -211,7 +211,7 @@ the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on g <h4>Playlist handling</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">(</span><span class="n">ytdl</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">input_default_bindings</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">input_vo_keyboard</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> @@ -231,11 +231,11 @@ the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on g <h4>Directly feeding mpv data from python</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="nd">@player</span><span class="o">.</span><span class="n">python_stream</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span> <span class="nf">reader</span><span class="p">():</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">def</span><span class="w"> </span><span class="nf">reader</span><span class="p">():</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'test.webm'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">yield</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1024</span><span class="o">*</span><span class="mi">1024</span><span class="p">)</span><span class="w"></span></span> @@ -249,7 +249,7 @@ the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on g <p>The easiest way to load custom subtitles from a file is to pass the <tt class="docutils literal"><span class="pre">--sub-file</span></tt> option to the <tt class="docutils literal">loadfile</tt> call:</p> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span><span class="o">.</span><span class="n">loadfile</span><span class="p">(</span><span class="s1">'test.webm'</span><span class="p">,</span> <span class="n">sub_file</span><span class="o">=</span><span class="s1">'test.srt'</span><span class="p">)</span><span class="w"></span></span> @@ -261,7 +261,7 @@ called once the player is done loading the file and starts playing. An easy way <tt class="docutils literal"><span class="pre">core-idle</span></tt> property.</p> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">player</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="s1">'test.webm'</span><span class="p">)</span><span class="w"></span></span> @@ -291,14 +291,14 @@ the MPV instance. See <a class="reference external" href="https://github.com/jas <h4>PyQT embedding</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">sys</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="o">*</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span> <span class="nn">PyQt5.QtCore</span> <span class="kn">import</span> <span class="o">*</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span><span class="w"> </span><span class="nn">PyQt5.QtWidgets</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span><span class="w"> </span><span class="nn">PyQt5.QtCore</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">class</span> <span class="nc">Test</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">class</span><span class="w"> </span><span class="nc">Test</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">QWidget</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="p">)</span><span class="w"></span></span> @@ -314,7 +314,7 @@ the MPV instance. See <a class="reference external" href="https://github.com/jas <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="c1"># This is necessary since PyQT stomps over the locale settings needed by libmpv.</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="c1"># This needs to happen after importing PyQT before creating the first mpv.MPV instance.</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">locale</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">locale</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">locale</span><span class="o">.</span><span class="n">setlocale</span><span class="p">(</span><span class="n">locale</span><span class="o">.</span><span class="n">LC_NUMERIC</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">win</span> <span class="o">=</span> <span class="n">Test</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">win</span><span class="o">.</span><span class="n">show</span><span class="p">()</span><span class="w"></span></span> @@ -325,17 +325,17 @@ the MPV instance. See <a class="reference external" href="https://github.com/jas <h4>PyGObject embedding</h4> <pre class="code python literal-block"> <span class="lineno"></span><span class="line"><span class="ch">#!/usr/bin/env python3</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">gi</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">gi</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span> <span class="nn">mpv</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">mpv</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span><span class="n">gi</span><span class="o">.</span><span class="n">require_version</span><span class="p">(</span><span class="s1">'Gtk'</span><span class="p">,</span> <span class="s1">'3.0'</span><span class="p">)</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span> <span class="nn">gi.repository</span> <span class="kn">import</span> <span class="n">Gtk</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="kn">from</span><span class="w"> </span><span class="nn">gi.repository</span><span class="w"> </span><span class="kn">import</span> <span class="n">Gtk</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">class</span> <span class="nc">MainClass</span><span class="p">(</span><span class="n">Gtk</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span><span class="k">class</span><span class="w"> </span><span class="nc">MainClass</span><span class="p">(</span><span class="n">Gtk</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="nb">super</span><span class="p">(</span><span class="n">MainClass</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">set_default_size</span><span class="p">(</span><span class="mi">600</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"destroy"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_destroy</span><span class="p">)</span><span class="w"></span></span> @@ -348,7 +348,7 @@ the MPV instance. See <a class="reference external" href="https://github.com/jas <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">mpv</span> <span class="o">=</span> <span class="n">mpv</span><span class="o">.</span><span class="n">MPV</span><span class="p">(</span><span class="n">wid</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">widget</span><span class="o">.</span><span class="n">get_property</span><span class="p">(</span><span class="s2">"window"</span><span class="p">)</span><span class="o">.</span><span class="n">get_xid</span><span class="p">()))</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">mpv</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="s2">"test.webm"</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span> <span class="nf">on_destroy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span> <span class="k">def</span><span class="w"> </span><span class="nf">on_destroy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="bp">self</span><span class="o">.</span><span class="n">mpv</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">Gtk</span><span class="o">.</span><span class="n">main_quit</span><span class="p">()</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> @@ -356,7 +356,7 @@ the MPV instance. See <a class="reference external" href="https://github.com/jas <span class="lineno"></span><span class="line"><span class="w"></span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="c1"># This is necessary since like Qt, Gtk stomps over the locale settings needed by libmpv.</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="c1"># Like with Qt, this needs to happen after importing Gtk but before creating the first mpv.MPV instance.</span><span class="w"></span></span> -<span class="lineno"></span><span class="line"><span class="w"></span> <span class="kn">import</span> <span class="nn">locale</span><span class="w"></span></span> +<span class="lineno"></span><span class="line"><span class="w"></span> <span class="kn">import</span><span class="w"> </span><span class="nn">locale</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">locale</span><span class="o">.</span><span class="n">setlocale</span><span class="p">(</span><span class="n">locale</span><span class="o">.</span><span class="n">LC_NUMERIC</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">)</span><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span></span> <span class="lineno"></span><span class="line"><span class="w"></span> <span class="n">application</span> <span class="o">=</span> <span class="n">MainClass</span><span class="p">()</span><span class="w"></span></span> @@ -395,7 +395,7 @@ For details, see <a class="reference external" href="https://github.com/mpv-play </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/svg-flatten/index.html b/projects/svg-flatten/index.html index 29868a3..8d916fa 100644 --- a/projects/svg-flatten/index.html +++ b/projects/svg-flatten/index.html @@ -50,7 +50,7 @@ gerbolyze.</p> <p>I developed svg-flatten as part of <a class="reference external" href="http://jaseg.de/projects/gerbolyze/">gerbolyze</a>, but it can be used independently.</p> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> diff --git a/projects/wsdiff/index.html b/projects/wsdiff/index.html index 8ae2de2..50a5099 100644 --- a/projects/wsdiff/index.html +++ b/projects/wsdiff/index.html @@ -92,7 +92,7 @@ on available screen space.</p> </div> </div> </main><footer> - Copyright © 2023 Jan Sebastian Götte + Copyright © 2025 Jan Sebastian Götte / <a href="/about/">About</a> / <a href="/imprint/">Imprint</a> </footer> |