<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ljubomir Buturovic</title>
    <description>The latest articles on Forem by Ljubomir Buturovic (@ljbuturovic).</description>
    <link>https://forem.com/ljbuturovic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2774259%2Ffe0aebfa-14b7-4488-b44e-e5b11eed931c.png</url>
      <title>Forem: Ljubomir Buturovic</title>
      <link>https://forem.com/ljbuturovic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ljbuturovic"/>
    <language>en</language>
    <item>
      <title>muziqa: mp3 collection visualizer</title>
      <dc:creator>Ljubomir Buturovic</dc:creator>
      <pubDate>Sat, 11 Apr 2026 04:01:39 +0000</pubDate>
      <link>https://forem.com/ljbuturovic/muziqa-mp3-collection-visualizer-1jg7</link>
      <guid>https://forem.com/ljbuturovic/muziqa-mp3-collection-visualizer-1jg7</guid>
      <description>&lt;p&gt;I have thousands of MP3s and FLACs sitting in folders. I've been&lt;br&gt;
collecting music for years but never had a good sense of what was&lt;br&gt;
actually in there. So I built &lt;strong&gt;muziqa&lt;/strong&gt; — a command-line tool that&lt;br&gt;
reads your music tags and generates charts.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Run it against a folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;muziqa ~/Music
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads the ID3/Vorbis/MP4 tags from every supported file (MP3, FLAC,&lt;br&gt;
WAV, M4A, OGG), recursively, and produces two PNG charts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;top 20 artists by track count, side by side with tracks by decade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc4cproxfv341rrq875f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyc4cproxfv341rrq875f.png" alt="Top artists and decades" width="800" height="325"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tracks by year, with a 5-year rolling average of mean tracks per artist overlaid on a twin axis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2igcgvkllke8ckeos5gy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2igcgvkllke8ckeos5gy.png" alt="Top artists and decades" width="800" height="397"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Optionally, with &lt;code&gt;--country&lt;/code&gt; and &lt;code&gt;--genre&lt;/code&gt;, it queries&lt;br&gt;
&lt;a href="https://musicbrainz.org" rel="noopener noreferrer"&gt;MusicBrainz&lt;/a&gt; to look up each artist's&lt;br&gt;
country of origin and genre, then generates two more charts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tracks by country&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0lqzlhgpat128us9uxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0lqzlhgpat128us9uxp.png" alt="Top artists and decades" width="800" height="530"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tracks by genre&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws7bxy13yevh7xhxgqul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws7bxy13yevh7xhxgqul.png" alt="Top artists and decades" width="800" height="530"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The MusicBrainz lookup respects their 1 req/sec rate limit and caches&lt;br&gt;
results locally, so it only runs once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install (Mac and Linux)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;muziqa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It probably runs on Windows but I haven't tried&lt;/p&gt;

&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ljbuturovic/muziqa" rel="noopener noreferrer"&gt;https://github.com/ljbuturovic/muziqa&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>cli</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>llm-models: keeping up with LLM frontier model versions</title>
      <dc:creator>Ljubomir Buturovic</dc:creator>
      <pubDate>Sun, 23 Nov 2025 00:02:38 +0000</pubDate>
      <link>https://forem.com/ljbuturovic/llmmodels-keeping-up-with-llm-frontier-model-versions-1dh9</link>
      <guid>https://forem.com/ljbuturovic/llmmodels-keeping-up-with-llm-frontier-model-versions-1dh9</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;With the flurry of new LLMs published almost daily, it may be confusing for developers to keep track of which exact models are available through various API services at any given time. When gemini 3 was released, I could not find the correct model name for a while (turned out to be "gemini-3-pro-preview")&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;I built (with Claude Code help) a simple CLI app to list available models for the major providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;llm_models &lt;span class="nt"&gt;-h&lt;/span&gt;
usage: llm_models &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;OpenAI,Anthropic,xAI,GoogleAI,VertexAI&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt; REGION]

List available LLM models from various providers

options:
  &lt;span class="nt"&gt;-h&lt;/span&gt;, &lt;span class="nt"&gt;--help&lt;/span&gt;            show this &lt;span class="nb"&gt;help &lt;/span&gt;message and &lt;span class="nb"&gt;exit&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;OpenAI,Anthropic,xAI,GoogleAI,VertexAI&lt;span class="o"&gt;}&lt;/span&gt;, &lt;span class="nt"&gt;--provider&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;OpenAI,Anthropic,xAI,GoogleAI,VertexAI&lt;span class="o"&gt;}&lt;/span&gt;
                        The LLM provider backend.
                        - &lt;span class="s1"&gt;'GoogleAI'&lt;/span&gt;: Google AI Studio &lt;span class="o"&gt;(&lt;/span&gt;API Key&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Global/Auto-routed.
                        - &lt;span class="s1"&gt;'VertexAI'&lt;/span&gt;: Google Cloud Vertex AI &lt;span class="o"&gt;(&lt;/span&gt;IAM Auth&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Region-specific.
  &lt;span class="nt"&gt;-r&lt;/span&gt; REGION, &lt;span class="nt"&gt;--region&lt;/span&gt; REGION
                        Google Cloud region &lt;span class="o"&gt;(&lt;/span&gt;e.g., &lt;span class="s1"&gt;'us-central1'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
                        &lt;span class="k"&gt;*&lt;/span&gt;Required&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;provider is VertexAI. Ignored &lt;span class="k"&gt;for &lt;/span&gt;other providers.

&lt;span class="nv"&gt;$ &lt;/span&gt;llm_models &lt;span class="nt"&gt;-p&lt;/span&gt; Anthropic
Listing available Anthropic models...
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
Model: claude-haiku-4-5-20251001 &lt;span class="o"&gt;(&lt;/span&gt;Claude Haiku 4.5&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-sonnet-4-5-20250929 &lt;span class="o"&gt;(&lt;/span&gt;Claude Sonnet 4.5&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-opus-4-1-20250805 &lt;span class="o"&gt;(&lt;/span&gt;Claude Opus 4.1&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-opus-4-20250514 &lt;span class="o"&gt;(&lt;/span&gt;Claude Opus 4&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-sonnet-4-20250514 &lt;span class="o"&gt;(&lt;/span&gt;Claude Sonnet 4&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-3-7-sonnet-20250219 &lt;span class="o"&gt;(&lt;/span&gt;Claude Sonnet 3.7&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-3-5-haiku-20241022 &lt;span class="o"&gt;(&lt;/span&gt;Claude Haiku 3.5&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-3-haiku-20240307 &lt;span class="o"&gt;(&lt;/span&gt;Claude Haiku 3&lt;span class="o"&gt;)&lt;/span&gt;
Model: claude-3-opus-20240229 &lt;span class="o"&gt;(&lt;/span&gt;Claude Opus 3&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;% pip3 &lt;span class="nb"&gt;install &lt;/span&gt;llm-models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;llm-models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;llm-models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub repo: &lt;a href="https://github.com/ljbuturovic/llm-models" rel="noopener noreferrer"&gt;https://github.com/ljbuturovic/llm-models&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Give it a try and let me know what you think in the comments!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>python</category>
      <category>llm</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
