<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with Know-How sorted by active.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1148582" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3562391" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3561569" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3085582" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2864001" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3431135" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3300846" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3307626" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3396835" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3396843" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3060429" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3376909" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3345034" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3344075" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1052348" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3201543" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2308671" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2829436" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3277715" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2177967" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1148582">
    <title>Placing a ContourPlot under a Plot3D</title>
    <link>https://community.wolfram.com/groups/-/m/t/1148582</link>
    <description>![Placing a ContourPlot under a Plot3D][1]&#xD;
&#xD;
Placing a ContourPlot under a Plot3D could be a useful visualization. One strategy is quite simple: texture-map 2D plot on a rectangle under your 3D surface. I took a liberty with some styling that I like - you can always come back to yours. &#xD;
&#xD;
    contourPotentialPlot1 = ContourPlot[-3600. h^2 + 0.02974 h^4 - 5391.90 s^2 + &#xD;
       0.275 h^2 s^2 + 0.125 s^4, {h, -400, 400}, {s, -300, 300}, &#xD;
     PlotRange -&amp;gt; {-1.4*10^8, 2*10^7}, Contours -&amp;gt; 15, Axes -&amp;gt; False, &#xD;
     PlotPoints -&amp;gt; 30, PlotRangePadding -&amp;gt; 0, Frame -&amp;gt; False, ColorFunction -&amp;gt; &amp;#034;DarkRainbow&amp;#034;];&#xD;
&#xD;
    potential1 = Plot3D[-3600. h^2 + 0.02974 h^4 - 5391.90 s^2 + 0.275 h^2 s^2 + &#xD;
        0.125 s^4, {h, -400, 400}, {s, -300, 300}, &#xD;
       PlotRange -&amp;gt; {-1.4*10^8, 2*10^7}, ClippingStyle -&amp;gt; None, &#xD;
       MeshFunctions -&amp;gt; {#3 &amp;amp;}, Mesh -&amp;gt; 15, MeshStyle -&amp;gt; Opacity[.5], &#xD;
       MeshShading -&amp;gt; {{Opacity[.3], Blue}, {Opacity[.8], Orange}}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;];&#xD;
&#xD;
    level = -1.2 10^8; gr = Graphics3D[{Texture[contourPotentialPlot1], EdgeForm[], &#xD;
    Polygon[{{-400, -300, level}, {400, -300, level}, {400, 300, level}, {-400, 300, level}}, &#xD;
    VertexTextureCoordinates -&amp;gt; {{0, 0}, {1, 0}, {1, 1}, {0, 1}}]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;];&#xD;
&#xD;
    Show[potential1, gr, PlotRange -&amp;gt; All, BoxRatios -&amp;gt; {1, 1, .6}, FaceGrids -&amp;gt; {Back, Left}]&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
You can see I used `PlotRangePadding -&amp;gt; 0` option in `ContourPlot`. It is to remove white space around the graphics to make texture mapping more precise. If you need utmost precision you can take another path. Extract graphics primitives from `ContourPlot` and make them 3D graphics primitives. If you need to color the bare contours - you could replace `Line` by `Polygon` and do some tricks with `FaceForm` based on a contour location.&#xD;
&#xD;
    level = -1.2 10^8;&#xD;
    pts = Append[#, level] &amp;amp; /@ contourPotentialPlot1[[1, 1]];&#xD;
    cts = Cases[contourPotentialPlot1, Line[l_], Infinity];&#xD;
    cts3D = Graphics3D[GraphicsComplex[pts, {Opacity[.5], cts}]];&#xD;
&#xD;
    Show[potential1, cts3D, PlotRange -&amp;gt; All, BoxRatios -&amp;gt; {1, 1, .6}, &#xD;
     FaceGrids -&amp;gt; {Bottom, Back, Left}]&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
  &#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=PlacingaContourPlotunderaPlot3D.png&amp;amp;userId=20103&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=13631.png&amp;amp;userId=20103&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=43692.png&amp;amp;userId=20103</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2017-07-18T17:33:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3562391">
    <title>AI assisted access of Garmin FIT data via Python interface</title>
    <link>https://community.wolfram.com/groups/-/m/t/3562391</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/d5e6a993-0d86-4c39-91b4-64b5395231f5</description>
    <dc:creator>Robert Rimmer</dc:creator>
    <dc:date>2025-10-18T21:19:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3561569">
    <title>Access and visualize Garmin FIT data: nocturnal oxygen saturation, hike activity and GPS</title>
    <link>https://community.wolfram.com/groups/-/m/t/3561569</link>
    <description>![Access and visualize Garmin FIT data: nocturnal oxygen saturation, hike activity and GPS][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=AccessGarminFITdata.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/d850ec9f-3211-42e9-b588-52137915717f</description>
    <dc:creator>Robert Rimmer</dc:creator>
    <dc:date>2025-10-16T18:53:49Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3085582">
    <title>Google&amp;#039;s Gemini - API access from the Wolfram Language (alternative to GPT-4?)</title>
    <link>https://community.wolfram.com/groups/-/m/t/3085582</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/3b09496e-e96b-46fb-8f3f-7a1515d83bd8</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2023-12-17T21:07:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2864001">
    <title>Displaying graphics and images inline on Wolfram Engine</title>
    <link>https://community.wolfram.com/groups/-/m/t/2864001</link>
    <description>I have been using Wolfram Engine for several personal projects over the last few months. Despite being free, one gets almost everything in the Wolfram Engine except for the beautiful frontend and related Dynamic functions that takes interactive computing to the next level. Because of this, it becomes a little troublesome when working with graphics and images. &#xD;
&#xD;
When using wolfram engine on the terminal, if you try to plot a graph, you are greeted with the output `--Graphics--` and this starts to become annoying after sometime. The obvious workaround is to export the expression somewhere on your file system and then use an external image viewer to see the graph. While it is not a herculean task, it becomes too distracting when doing it redundantly in a large project.&#xD;
&#xD;
Thankfully there are projects like the Wolfram Langugae for Jupyter, Wolfram Engine JS Frontend, Wolfam Language Notebook on VS Code, etc. All these are really sophisticated frontends that provide a near Mathematica notebook experience. But personally, I cannot commit to using one of these frontends for my projects as most of them are still experimental and they tend to break at some point. I do use Jupyter Notebook sometimes when I have to present something but if the kernel hangs for some reason, it becomes hard to re-establish the connection. &#xD;
&#xD;
For most of the time, I prefer using Wolfram Engine from the termninal and  I write all my custom functions and scripts on a text editor. I use the Wolfram Engine to quickly evaluate a piece of code to verify its output and if it works as expected I trasfer the code to my text editor. This is my typical workflow. As a part of this, when I have to deal with images and grpahics, it becomes tiresome to export the output, navigate to the export directory and open the image just to get a quick view of the image/graphic output.&#xD;
&#xD;
For sometime, I was using `&amp;lt;&amp;lt;JavaGraphics` which I picked up from a stackexchange post. It works alright to some extent. It displays graphics but not images (at least on my machine, not sure if this is the case with other operating systems). After a little bit more searching, I came with the perfect setup for my workflow. I discovered that there are some terminal emulators that are capable of displaying images. These terminals use sixel grahpics format to display images inline: https://www.arewesixelyet.com/&#xD;
&#xD;
Since I am on macOS, I use iTerm2 and it has sixel support. From the documentation of iTerm2, I found that there is a utility script called `imgcat` that allows to display images inline:&#xD;
https://iterm2.com/documentation-images.html&#xD;
&#xD;
This solved 80% of the issue. All I did next was to download the script and put it in my `$PATH`. Then I add a helper function `qView` in my `init.m` file. This function would take a graphics or image expression and export it a temporary directory and then use `imgcat` to display the image using the function Run.&#xD;
&#xD;
```&#xD;
qView[g_] := Module[&#xD;
		{fileName},&#xD;
		fileName = FileNameJoin[{&#xD;
			&amp;#034;~&amp;#034;,&#xD;
			&amp;#034;tmp&amp;#034;,&#xD;
			StringReplace[&#xD;
				DateString[&amp;#034;ISODateTime&amp;#034;], &#xD;
				&amp;#034;:&amp;#034; -&amp;gt; &amp;#034;-&amp;#034;&#xD;
			] &amp;lt;&amp;gt; &amp;#034;.png&amp;#034;&#xD;
		}];&#xD;
		Export[fileName, g];&#xD;
		Run[&amp;#034;imgcat &amp;#034; &amp;lt;&amp;gt; fileName];&#xD;
	]&#xD;
```&#xD;
And that is all. Now I can quickly view any image or graphics  output right on the terminal just by postfixing the function `qView`. Below are some screenshots.&#xD;
![Plotting BesselJ function][1]&#xD;
![A 3D plot][2]&#xD;
![An Image][3]&#xD;
&#xD;
Finally I tried plotting a list of images. I expected the output to be a rasterized list of images. But even better, surprisingly the output was an animation of images in the list.&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
To conclude, I would like to say that I have sort of created the perfect development environment for my workflow and maybe this would be helpful to someone. On Linux, the prgram img2sixel can be used similar to `imgcat`, however I have not tested this yet. Further ideas and suggestions are most welcome. Cheers :)&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2023-04-02at11.57.08.png&amp;amp;userId=2863978&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2023-04-02at11.58.26.png&amp;amp;userId=2863978&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2023-04-02at12.00.44.png&amp;amp;userId=2863978&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenRecording2023-04-02at12.04.26.gif&amp;amp;userId=2863978</description>
    <dc:creator>Soumya Sambeet Mohapatra</dc:creator>
    <dc:date>2023-04-02T10:23:13Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3431135">
    <title>Matrices tutorial: lists, columns, and rows in Wolfram</title>
    <link>https://community.wolfram.com/groups/-/m/t/3431135</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/3b30d83b-f343-4f0e-8366-5e30f0d7edc3</description>
    <dc:creator>Roger J Brown</dc:creator>
    <dc:date>2025-03-24T18:51:07Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3300846">
    <title>AILink paclet: Wolfram + GPT-4o integration with plugins, web and system access, and data analysis</title>
    <link>https://community.wolfram.com/groups/-/m/t/3300846</link>
    <description>![AILink paclet: Wolfram + GPT-4o integration with plugins, web and system access, and data analysis][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Image20241018220831.jpg&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/d9f125fe-0ba3-4381-b6aa-0a1934ad0527</description>
    <dc:creator>Kirill Belov</dc:creator>
    <dc:date>2024-10-18T10:30:19Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3307626">
    <title>Ollama LLM based AI assistant for email processing</title>
    <link>https://community.wolfram.com/groups/-/m/t/3307626</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/0368042a-87f1-4509-a7ab-f963b0d98434</description>
    <dc:creator>Arnoud Buzing</dc:creator>
    <dc:date>2024-10-24T19:46:54Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3396835">
    <title>The Donomen naming system</title>
    <link>https://community.wolfram.com/groups/-/m/t/3396835</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/060dbf42-47e8-43c5-9ce0-6446fafd7134</description>
    <dc:creator>J. M.</dc:creator>
    <dc:date>2025-02-19T11:04:48Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3396843">
    <title>Naming bicyclic saturated hydrocarbons</title>
    <link>https://community.wolfram.com/groups/-/m/t/3396843</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/e717f1c3-54e5-4313-9238-9439e0f72fa1</description>
    <dc:creator>J. M.</dc:creator>
    <dc:date>2025-02-19T11:09:49Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3060429">
    <title>[GiF] Turning in circles in a hexagon…</title>
    <link>https://community.wolfram.com/groups/-/m/t/3060429</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=DotArt3.gif&amp;amp;userId=73716&#xD;
  [2]: https://www.wolframcloud.com/obj/f3c4bb46-fb46-4686-821c-eff9742db0f6</description>
    <dc:creator>Sander Huisman</dc:creator>
    <dc:date>2023-11-05T13:06:40Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3376909">
    <title>Love heart jewelry V: optical secret</title>
    <link>https://community.wolfram.com/groups/-/m/t/3376909</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Main03022025.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/c6974916-a865-4dfe-ac23-4d6d90339e7c</description>
    <dc:creator>Frederick Wu</dc:creator>
    <dc:date>2025-02-03T15:12:32Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3345034">
    <title>Nitrogen recoveries with different polymer membranes</title>
    <link>https://community.wolfram.com/groups/-/m/t/3345034</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/1e682589-cfa7-41db-bcba-3d4e6e3cbd2d</description>
    <dc:creator>Housam Binous</dc:creator>
    <dc:date>2024-12-26T07:27:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3344075">
    <title>AsyncEvaluate: fast asynchronous tasks</title>
    <link>https://community.wolfram.com/groups/-/m/t/3344075</link>
    <description>![AsyncEvaluate: fast asynchronous tasks][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=4214%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B02024-12-24142014.png&amp;amp;userId=937303&#xD;
  [2]: https://www.wolframcloud.com/obj/c8338589-4c85-4233-ad85-299b4168065c</description>
    <dc:creator>Kirill Belov</dc:creator>
    <dc:date>2024-12-24T10:24:07Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1052348">
    <title>Calculating NMR-spectra with Wolfram Language</title>
    <link>https://community.wolfram.com/groups/-/m/t/1052348</link>
    <description>#Introduction&#xD;
&#xD;
Perhaps there are already Mma-Procedures to calculate NMR-spectra, but I did not do a literature research.&#xD;
&#xD;
I post a notebook to calculate NMR-Spectra of simple spin I = 1/2 systems.&#xD;
&#xD;
The notebook comes in two parts. &#xD;
&#xD;
Part one uses a spin-product function approach, where the spin-product function a, a ,...b is used as e.g. phi [ 1, 1, ,...., -1 ]. &#xD;
The Hamiltonian is constructed according to different mT-values and the spectrum is calculated.&#xD;
&#xD;
Part two uses the &amp;#034;brute force&amp;#034; approach where all operators are mapped unto matrices (Kronecker-Products of individual matrix-operators) in the total spin-space. So here products of operators are matrix-products (in part 1 they are functions of functions) .Having the Hamiltonian and its Eigensystem the spectrum is calculated.&#xD;
&#xD;
Note that the number of lines of even small systems are growing rapidly. So it may well be that there is not enough memory to cope with a system you would like to consider.&#xD;
&#xD;
If you omit giving numbers to frequencies and coupling-constants you may get pure theoretical results. That works fine for two spins, but already for three spins - although here you will still get the Hamiltonian - very large outputs are generated, especially in the Eigensystems, So you should avoid that.&#xD;
&#xD;
It seems to be not too complicated to modify the approach in part two to include spins with I &amp;gt; 1/2.&#xD;
&#xD;
And certainly it is well possible to modify the code as to get an iterative procedure to fit data to spectra.&#xD;
&#xD;
I am aware that there are &amp;#034;professional&amp;#034; systems to do all this, but I just wanted to see how it could be done in Mathematica.&#xD;
#Part 1#&#xD;
Number of Spins&#xD;
&#xD;
    nsp = 3;&#xD;
Input of Parameters&#xD;
&#xD;
    freqs = {372.2, 364.4, 342, 6.083, 5.8};&#xD;
    JJ = ( {&#xD;
        {0, .91, 17.9, 1, 1, 1},&#xD;
        {0, 0, 11.75, 1, 1, 1},&#xD;
        {0, 0, 0, 1, 1, 1},&#xD;
        {0, 0, 0, 0, 1, 1},&#xD;
        {0, 0, 0, 0, 0, 1},&#xD;
        {0, 0, 0, 0, 0, 0}&#xD;
       } );&#xD;
    Do[\[Nu][i] = freqs[[i]], {i, 1, nsp}];&#xD;
    Do[J[i, k] = JJ[[i, k]], {i, 1, nsp - 1}, {k, i + 1, nsp}];&#xD;
&#xD;
Basevectors&#xD;
&#xD;
    base = Apply[\[CurlyPhi], &#xD;
      IntegerDigits[#, 2, nsp] + 1 &amp;amp; /@ Table[j, {j, 0, 2^nsp - 1}] /. &#xD;
       2 -&amp;gt; -1, {1}]&#xD;
![enter image description here][1]&#xD;
&#xD;
mT - Values&#xD;
&#xD;
    mT = Table[-nsp/2 + j, {j, 0, nsp}]&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
Number of lines in the spectrum  (  =  Sum[Binomial[nsp, k] Binomial[nsp, k + 1], {k, 0, nsp - 1}],  because only transitions between states of different mT&amp;#039;s give lines on non-zero intensity )&#xD;
&#xD;
    numberoflines = Binomial[2 nsp, nsp - 1]&#xD;
&#xD;
&amp;gt; 15&#xD;
&#xD;
Rule for scalar products&#xD;
&#xD;
    rscp = {\[CurlyPhi][x__]^2 -&amp;gt; 1, \[CurlyPhi][x__] \[CurlyPhi][y__] -&amp;gt;  0}&#xD;
![enter image description here][3]&#xD;
&#xD;
SpinOperators&#xD;
&#xD;
    cs[a_, j_] := Module[{t}, t = a; b = t[[j]]; t[[j]] = -b; t]&#xD;
    Ix[v_, j_] := v/2 /. \[CurlyPhi][x___] :&amp;gt; \[CurlyPhi] @@ cs[{x}, j]&#xD;
    Iy[v_, j_] := &#xD;
     I v/2 /. \[CurlyPhi][x___] :&amp;gt; {x}[[j]] \[CurlyPhi] @@ cs[{x}, j]&#xD;
    Iz[v_, j_] := v/2 /. \[CurlyPhi][x___] :&amp;gt; {x}[[j]] \[CurlyPhi][x]&#xD;
&#xD;
Example&#xD;
&#xD;
    {Ix[\[CurlyPhi][4], 1], Ix[\[CurlyPhi][-1], 1], Iy[\[CurlyPhi][5], 1],&#xD;
      Iy[\[CurlyPhi][-1], 1], Iz[\[CurlyPhi][6], 1], &#xD;
     Iz[\[CurlyPhi][-1], 1]}&#xD;
![enter image description here][7]&#xD;
&#xD;
Hamiltonian  - Matrixelements  Subscript[H, i,j]  for (sub-)base b&#xD;
&#xD;
    HH[b_, i_,  j_] := (Sum[\[Nu][m] b[[j]] Iz[b[[i]], m], {m, 1, nsp}] + &#xD;
         Sum[J[m, k] b[[&#xD;
            j]] (Ix[Ix[b[[i]], k], m] + Iy[Iy[b[[i]], k], m] + &#xD;
             Iz[Iz[b[[i]], k], m]), {m, 1, nsp - 1}, {k, m + 1, nsp}] // &#xD;
        Expand) /. rscp&#xD;
Example&#xD;
&#xD;
    HH[base, 1, 1]&#xD;
&#xD;
&amp;gt; 546.94&#xD;
&#xD;
    HH[base, 1, 2]&#xD;
&#xD;
&amp;gt; 0&#xD;
&#xD;
    HH[base, 3, 5]&#xD;
&#xD;
&amp;gt; 0.455&#xD;
&#xD;
Spinfunctions according to mT - value &#xD;
&#xD;
    wf = Function[x, Select[base, Total[List @@ #] == 2 x &amp;amp;]] /@ mT&#xD;
![enter image description here][8]&#xD;
&#xD;
Hamilton - Submatrices&#xD;
&#xD;
    HSM[j_] := (nn = Length[wf[[j]]]; &#xD;
      Table[HH[wf[[j]], m, n], {m, 1, nn}, {n, 1, nn}])&#xD;
    HSM[2];&#xD;
    % // MatrixForm&#xD;
![enter image description here][9]&#xD;
&#xD;
    HSM[2] /. {\[Nu][10] -&amp;gt; -\[Nu], \[Nu][11] -&amp;gt; 0, \[Nu][12] -&amp;gt; \[Nu], &#xD;
       J[1, 2] -&amp;gt; J, J[1, 3] -&amp;gt; J, J[2, 3] -&amp;gt; J};&#xD;
      % // MatrixForm&#xD;
![enter image description here][13]&#xD;
&#xD;
Get Eigenstates  \[Congruent] all sets { freq,  eigenvector  } for different spin-states (mT values)&#xD;
&#xD;
    frevec[n_] := Module[{es},&#xD;
      es = Eigensystem[HSM[n]];&#xD;
      {#[[1]], #[[2]].wf[[n]]} &amp;amp; /@ Transpose[es]&#xD;
      ]&#xD;
    eigenstates = frevec /@ Range[nsp + 1]&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
Operator for calculating relative intensities&#xD;
&#xD;
    IOP[x_] := Sum[Ix[x, n], {n, 1, nsp}]&#xD;
Calculating a spectral line  = difference of eigenvalues and intensity&#xD;
&#xD;
    line[a_, b_] := Module[{},&#xD;
      freq = Abs[a[[1]] - b[[1]]];&#xD;
      m2 = (Expand[a[[2]] IOP[b[[2]]]] /. rscp)^2;&#xD;
      {freq, Sqrt[m2]}]&#xD;
Lorentzfunction&#xD;
&#xD;
    LF[x_, x0_, a_, h_] := Module[{},&#xD;
      If[h == 0, h = 1];&#xD;
      1/Sqrt[Pi] (a h/2)/(h^2/4 + Pi (x - x0)^2)]&#xD;
Calculating the spectrum&#xD;
&#xD;
    spec = Table[0, {numberoflines}];&#xD;
    nL = 0;&#xD;
    Do[&#xD;
      lk = Length[eigenstates[[i]]];&#xD;
      lk1 = Length[eigenstates[[i + 1]]];&#xD;
      Do[&#xD;
       Do[&#xD;
        nL = nL + 1;&#xD;
        spec[[nL]] = line[eigenstates[[i, m]], eigenstates[[i + 1, n ]]],&#xD;
        {n, 1, lk1}&#xD;
        ],&#xD;
       {m, 1, lk}&#xD;
       ],&#xD;
      {i, 1, Length[eigenstates] - 1}];&#xD;
    normalizer = Max[Transpose[spec][[2]]];&#xD;
    bb = {.95 Min[Transpose[spec][[1]]], 1.05 Max[Transpose[spec][[1]]]};&#xD;
    spec = {#[[1]], #[[2]]/normalizer} &amp;amp; /@ spec;&#xD;
    spec&#xD;
    pl1 = ListPlot[spec, Filling -&amp;gt; Axis]&#xD;
![enter image description here][15]&#xD;
&#xD;
Show the spectrum with lines&#xD;
&#xD;
    pl2 = Plot[&#xD;
      Plus @@ (LF[x, #[[1]], #[[2]], 1.5] &amp;amp; /@ spec), {x, bb[[1]], &#xD;
       bb[[2]]}, PlotRange -&amp;gt; All, AxesOrigin -&amp;gt; {320, 0}]&#xD;
![enter image description here][16]&#xD;
&#xD;
For some physical reason spectra are recorded so that frequencies grow from right to left. So the plot is reversed and compared to the experimental spectrum ( see http://www.users.csbsju.edu/~frioux/nmr/Speclab4.htm ) which is given below the plot.&#xD;
&#xD;
    pl3 = Plot[&#xD;
      Plus @@ (LF[-x, #[[1]], #[[2]], 1.5] &amp;amp; /@ spec), {x, -bb[[2]], -bb[[&#xD;
         1]]}, PlotRange -&amp;gt; All]&#xD;
![enter image description here][17]&#xD;
#Part 2#&#xD;
&#xD;
    nsp = 3;&#xD;
Input of Parameters&#xD;
&#xD;
    freqs = {372.2, 364.4, 342, 6.083, 5.8};&#xD;
    JJ = ( {&#xD;
        {0, .91, 17.9, 1, 1, 1},&#xD;
        {0, 0, 11.75, 1, 1, 1},&#xD;
        {0, 0, 0, 1, 1, 1},&#xD;
        {0, 0, 0, 0, 1, 1},&#xD;
        {0, 0, 0, 0, 0, 1},&#xD;
        {0, 0, 0, 0, 0, 0}&#xD;
       } );&#xD;
    Do[\[Nu][i] = freqs[[i]], {i, 1, nsp}];&#xD;
    Do[J[i, k] = JJ[[i, k]], {i, 1, nsp - 1}, {k, i + 1, nsp}];&#xD;
number of lines to be expected and dimension ot (total) spin - space (at least for spin 1/2 )&#xD;
&#xD;
    numberoflines = Binomial[2 nsp, nsp - 1]&#xD;
    dimspsp = 2^nsp&#xD;
&#xD;
&amp;gt; 15&#xD;
&#xD;
&amp;gt; 8&#xD;
&#xD;
spin operators for spin I = 1/2&#xD;
&#xD;
    ix = ( { {0, 1}, {1, 0} } )/2;&#xD;
    iy = ( { {0, -I}, {I, 0} } )/2;&#xD;
    iz = ( {{1, 0}, {0, -1} } )/2;&#xD;
&#xD;
this function constructs the spin operator of particle j as matrix in the spin space of n particles &#xD;
&#xD;
    Op[op_, n_, j_] := Module[{x, m},&#xD;
      x = Join[Table[{{1, 0}, {0, 1}}, {j - 1}], {op}, &#xD;
        Table[{{1, 0}, {0, 1}}, {n - j}]];&#xD;
      m = SparseArray[KroneckerProduct[Sequence @@ x]]&#xD;
      ]&#xD;
    oIx[j_] := Op[ix, nsp, j]&#xD;
    oIy[j_] := Op[iy, nsp, j]&#xD;
    oIz[j_] := Op[iz, nsp, j]&#xD;
&#xD;
Hamiltonian&#xD;
&#xD;
    HH = \!\(&#xD;
    \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(nsp\)]\(\[Nu][i] oIz[&#xD;
         i]\)\) + \!\(&#xD;
    \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(nsp - 1\)]\(&#xD;
    \*UnderoverscriptBox[\(\[Sum]\), \(j = i + 1\), \(nsp\)]J[i, &#xD;
          j] \((oIx[i] . oIx[j] + oIy[i] . oIy[j] + oIz[i] . oIz[j])\)\)\)&#xD;
&#xD;
&amp;gt; SparseArray[SequenceForm[&amp;#034;&amp;lt;&amp;#034;, 32, &amp;#034;&amp;gt;&amp;#034;], {8, 8}]&#xD;
&#xD;
Eigensystem for the Hamilton - Operator&#xD;
&#xD;
    est = Transpose[Eigensystem[HH]]&#xD;
![enter image description here][18]&#xD;
&#xD;
Intensity operator&#xD;
&#xD;
    IOP1 = \!\(&#xD;
    \*UnderoverscriptBox[\(\[Sum]\), \(j = 1\), \(nsp\)]\(oIx[j]\)\)&#xD;
&#xD;
&amp;gt; SparseArray[SequenceForm[&amp;#034;&amp;lt;&amp;#034;, 24, &amp;#034;&amp;gt;&amp;#034;], {8, 8}]&#xD;
&#xD;
    line1[a_, b_] := Module[{},&#xD;
      freq = Abs[a[[1]] - b[[1]]];&#xD;
      m2 = (a[[2]].IOP1.b[[2]])^2;&#xD;
      {freq, Sqrt[m2]}]&#xD;
&#xD;
Calculate spectrum, show it and display result from part 1&#xD;
&#xD;
    spec1 = Table[0, {Binomial[dimspsp, 2]}];&#xD;
    nL = 0;&#xD;
    Do[&#xD;
     Do[&#xD;
      nL = nL + 1;&#xD;
      spec1[[nL]] = line1[est[[u]], est[[v]]],&#xD;
      {u, v + 1, dimspsp}&#xD;
      ],&#xD;
     {v, 1, dimspsp - 1}&#xD;
     ]&#xD;
    spec1 = Select[spec1, #[[2]] &amp;gt; 0. &amp;amp;];&#xD;
    normalizer = Max[Transpose[spec1][[2]]];&#xD;
    bb = {.95 Min[Transpose[spec][[1]]], 1.05 Max[Transpose[spec][[1]]]};&#xD;
    spec1 = {#[[1]], #[[2]]/normalizer} &amp;amp; /@ spec1;&#xD;
    spec1&#xD;
    ListPlot[spec1, Filling -&amp;gt; Axis, FillingStyle -&amp;gt; Directive[Red, Thick]]&#xD;
    Show[pl1]&#xD;
![enter image description here][19]&#xD;
&#xD;
Plot the spectrum and compare with the result of the 1 st part&#xD;
&#xD;
    pl4 = Plot[&#xD;
      Plus @@ (LF[x, #[[1]], #[[2]], 1.5] &amp;amp; /@ spec1), {x, bb[[1]], &#xD;
       bb[[2]]}, PlotRange -&amp;gt; All, PlotStyle -&amp;gt; Red]&#xD;
    Show[pl2]&#xD;
![enter image description here][20]&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.21.45.png&amp;amp;userId=95400&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.23.20.png&amp;amp;userId=95400&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.25.36.png&amp;amp;userId=95400&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.21.45.png&amp;amp;userId=95400&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.21.45.png&amp;amp;userId=95400&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.21.45.png&amp;amp;userId=95400&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.28.10.png&amp;amp;userId=95400&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.32.12.png&amp;amp;userId=95400&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.33.44.png&amp;amp;userId=95400&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.21.45.png&amp;amp;userId=95400&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.23.20.png&amp;amp;userId=95400&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.25.36.png&amp;amp;userId=95400&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.34.56.png&amp;amp;userId=95400&#xD;
  [14]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.37.59.png&amp;amp;userId=95400&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.41.13.png&amp;amp;userId=95400&#xD;
  [16]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.42.24.png&amp;amp;userId=95400&#xD;
  [17]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.43.26.png&amp;amp;userId=95400&#xD;
  [18]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.50.48.png&amp;amp;userId=95400&#xD;
  [19]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.53.45.png&amp;amp;userId=95400&#xD;
  [20]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-04-25at16.55.25.png&amp;amp;userId=95400</description>
    <dc:creator>Hans Dolhaine</dc:creator>
    <dc:date>2017-04-04T08:36:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3201543">
    <title>Setup local AI with Ollama and Wolfram: A step-by-step guide for configuring on Windows systems</title>
    <link>https://community.wolfram.com/groups/-/m/t/3201543</link>
    <description>![Setup local AI with Ollama and Wolfram: A step-by-step guide for configuring on Windows systems][1]&#xD;
&#xD;
# Ollama setup (post-it note instructions)&#xD;
&#xD;
Set a Windows User Environment Variable OLLAMA_ORIGINS with a value of * (Start -&amp;gt; Settings -&amp;gt; System -&amp;gt; About -&amp;gt; Advanced System Settings (on the right) -&amp;gt; Advanced (tab) -&amp;gt; Environment Variables -&amp;gt; Add a new one on top)&#xD;
&#xD;
Here&amp;#039;s your HTTP request. The &amp;#034;ExportString&amp;#034; is the magic:&#xD;
&#xD;
    ollamaHttpRequest[model_, contextSize_, context_, seed_, streaming_, &#xD;
           prompt_] := HTTPRequest[&amp;#034;http://127.0.0.1:11434/api/generate&amp;#034;,&#xD;
           &amp;lt;|&amp;#034;Method&amp;#034; -&amp;gt; &amp;#034;POST&amp;#034;,&#xD;
            &amp;#034;Headers&amp;#034; -&amp;gt;&#xD;
             &amp;lt;|&amp;#034;Content-Type&amp;#034; -&amp;gt; &amp;#034;application/json&amp;#034;|&amp;gt;,&#xD;
            &amp;#034;Body&amp;#034; -&amp;gt; ExportString[&#xD;
              &amp;lt;|&amp;#034;model&amp;#034; -&amp;gt; model,&#xD;
               &amp;#034;prompt&amp;#034; -&amp;gt; prompt,&#xD;
               &amp;#034;context&amp;#034; -&amp;gt; context,&#xD;
               &amp;#034;stream&amp;#034; -&amp;gt; streaming,&#xD;
               &amp;#034;options&amp;#034; -&amp;gt;&#xD;
                &amp;lt;|&amp;#034;seed&amp;#034; -&amp;gt; seed,&#xD;
                 &amp;#034;num_ctx&amp;#034; -&amp;gt; contextSize|&amp;gt;|&amp;gt;,&#xD;
              &amp;#034;JSON&amp;#034;]|&amp;gt;];&#xD;
&#xD;
Do a URLRead on that to send it to Ollama and you get an object from Ollama you can parse (should give you a &amp;#039;200&amp;#039; status server code).&#xD;
&#xD;
Here&amp;#039;s how you parse a non-streaming response:&#xD;
&#xD;
    ollamaReadSingle[ollamaHttpResponse_] := &#xD;
      Association[ImportString[ollamaHttpResponse[&amp;#034;Body&amp;#034;], &amp;#034;JSON&amp;#034;]];&#xD;
&#xD;
And here&amp;#039;s how you parse a streaming one:&#xD;
&#xD;
    ollamaReadStreaming[ollamaHttpResponse_] := &#xD;
      Association[#] &amp;amp;@ImportString[#, &amp;#034;JSON&amp;#034;] &amp;amp; /@ &#xD;
       StringSplit[ollamaHttpResponse[&amp;#034;Body&amp;#034;], &amp;#034;\n&amp;#034;];&#xD;
&#xD;
Confirming this doesn&amp;#039;t to async responses yet (so you will wait even if you put in &amp;#034;streaming&amp;#034; unless you figure that part out).&#xD;
Didn&amp;#039;t see this anywhere else. As much fun as it is being the only person in the world with a barely-working prototype...&#xD;
&#xD;
# Streaming Chat Setup&#xD;
&#xD;
I am under the impression there is more interest in using Ollama with Mathematica. I&amp;#039;ve got quite a few features working, and would like to share. The idea with this is if you&amp;#039;re a grad student or armchair researcher, you can get up and running with Ollama and start experimenting today.&#xD;
&#xD;
If you&amp;#039;re not using Ollama, it is available at [ollama.com][2]. It is a free and runs AIs locally on your computer (with extensive use of your graphics card to generate responses).&#xD;
&#xD;
Attached is a notebook with an extensible framework that I hope will permit further experimentation with GPTs. Some features are included already. It&amp;#039;s tested, but not extensively. **Instructions are for Windows**, however there are parallel functions and features for Mac and Linux (and these instructions are also much more extensively covered online).&#xD;
&#xD;
All this model does is stream chat requests - it does not pull additional models, list what models you have, or run any other commands besides sending a streaming chat request (though it should be relatively easy to extend these features).&#xD;
&#xD;
**Crash Course**&#xD;
&#xD;
If you&amp;#039;re already using Ollama, the crash course is to run the commands to load the model names, variables, and functions in the &amp;#034;Run Once&amp;#034; section, then scroll down to the bottom and enjoy. You may need to add an &amp;#034;OLLAMA_ORIGINS&amp;#034; environment variable (detailed below).&#xD;
&#xD;
If this is your first time using Ollama, you will want to use Powershell to download at least one model file (this contains all the weights [the &amp;#034;brains&amp;#034;] of the AI). You should also attempt to start a Powershell chat session with the model to make sure it is returning responses, and there is no issue with Ollama failing to run.&#xD;
&#xD;
If you are having issues running Ollama commands from Powershell, see if you can navigate to the installation folder, typically %AppData%\Local\Programs\Ollama, and attempt to run the commands there. If commands work from the Ollama installation folder, then the Ollama path is likely missing from your &amp;#034;Path&amp;#034; environment variable.&#xD;
&#xD;
**Ollama Environment Variables**&#xD;
&#xD;
Unless you do application configuration for a living, this is probably your first time hearing about environment variables. There are a few that you&amp;#039;ll want to set / unset / know what they do.&#xD;
&#xD;
To get into these (on Windows 10), go to Start -&amp;gt; Settings -&amp;gt; System -&amp;gt; About, and click &amp;#034;Advanced system settings&amp;#034; on the right. On the &amp;#034;System Properties&amp;#034; window, go to the &amp;#034;Advanced&amp;#034; tab and click &amp;#034;Environment Variables&amp;#034;. You should get the following window:&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
(I removed my system irrelevant variables for obvious security reasons, but you should have a lot.)&#xD;
&#xD;
You may click &amp;#034;New&amp;#034; to add further variables. You will need to add &amp;#034;OLLAMA_ORIGINS&amp;#034; and set the value to &amp;#034;*://localhost&amp;#034; as in the example so that Ollama is allowed to receive connections from your own computer.&#xD;
&#xD;
If you click on &amp;#034;Path&amp;#034; and click &amp;#034;Edit&amp;#034;, you may have the path to the Ollama install directory in here. This allows Powershell, the Run dialog, and other things to run Ollama without needing to reference the entire folder path in the command line.&#xD;
&#xD;
&amp;#034;OLLAMA_MODELS&amp;#034; will let you specify a different directory to download models into.&#xD;
&#xD;
Lastly, please confirm that Mathematica is allowed to access the Internet (on version 12, this option is under Edit -&amp;gt; Preferences -&amp;gt; Internet &amp;amp; Mail).&#xD;
&#xD;
**Building Ollama HTTP Requests**&#xD;
&#xD;
Most of the HTTP request is built using Mathematica association datatypes - this is mostly just a list where values are assigned to a named &amp;#034;key&amp;#034; as well as maintaining an array position, and can be called by the name of the key.&#xD;
&#xD;
Same as I&amp;#039;ve mentioned in an earlier post, the secret to getting the HTTP requests to work is to export *just the body* of the HTTP request association to JSON:&#xD;
&#xD;
    ollamaHttpRequest[bodyAssociation_] :=&#xD;
      HTTPRequest[&amp;#034;http://127.0.0.1:11434/api/generate&amp;#034;,&#xD;
       &amp;lt;|&amp;#034;Method&amp;#034; -&amp;gt; &amp;#034;POST&amp;#034;,&#xD;
        &amp;#034;Headers&amp;#034; -&amp;gt; &amp;lt;|&amp;#034;Content-Type&amp;#034; -&amp;gt; &amp;#034;application/json&amp;#034;|&amp;gt;,&#xD;
        &amp;#034;Body&amp;#034; -&amp;gt; ExportString[bodyAssociation, &amp;#034;JSON&amp;#034;]|&amp;gt;];&#xD;
&#xD;
This portion works for streaming responses as well as single-body responses.&#xD;
&#xD;
The notebook attached builds the request in phases using a temporary association variable, beginning with a basic request saved to a temporary variable, and **appending** further body tags to that temporary variable before returning it as the result of the function:&#xD;
&#xD;
    ollamaHttpRequestBody[ollamaOptions_] :=&#xD;
    (&#xD;
        ollamaTempHttpRequestBody =&#xD;
            &amp;lt;|&amp;#034;model&amp;#034; -&amp;gt; ollamaInputModelString,&#xD;
                &amp;#034;prompt&amp;#034; -&amp;gt; ollamaInputFuncUserPromptString,&#xD;
                &amp;#034;stream&amp;#034; -&amp;gt; True,&#xD;
                &amp;#034;keep_alive&amp;#034; -&amp;gt; ollamaInputKeepAliveString,&#xD;
                &amp;#034;options&amp;#034; -&amp;gt; ollamaOptions|&amp;gt;;&#xD;
            &#xD;
            (* Context - Included if not empty *)&#xD;
            If[ollamaUseContext &amp;amp;&amp;amp; (ollamaVarCurrentConversationList != {}),&#xD;
                ollamaTempHttpRequestBody = &#xD;
                Append[ollamaTempHttpRequestBody, &#xD;
                &amp;#034;context&amp;#034; -&amp;gt; ollamaInputFuncSelectedContext]];&#xD;
            &#xD;
            (* Template *)&#xD;
            If[ollamaUseTemplate,&#xD;
                ollamaTempHttpRequestBody = &#xD;
                Append[ollamaTempHttpRequestBody, &#xD;
                &amp;#034;template&amp;#034; -&amp;gt; ollamaInputTemplateString]];&#xD;
            &#xD;
            (* System Prompt *)&#xD;
            If[ollamaUseSystem,&#xD;
                ollamaTempHttpRequestBody = &#xD;
                Append[ollamaTempHttpRequestBody, &#xD;
                &amp;#034;system&amp;#034; -&amp;gt; ollamaInputSystemPromptString]];&#xD;
            &#xD;
            (* Image - Included if this model is a vision model *)&#xD;
            If[ollamaUseImage &amp;amp;&amp;amp; &#xD;
                ollamaFuncIsBoolVision[ollamaInputModelString], &#xD;
                ollamaTempHttpRequestBody = &#xD;
                Append[ollamaTempHttpRequestBody, &#xD;
                &amp;#034;images&amp;#034; -&amp;gt; ollamaInputFuncImageList]];&#xD;
            &#xD;
            (* Include further body tags in here *)&#xD;
            &#xD;
            (* This returns just the temporary HTTP request body association \&#xD;
            variable as the result of the function *)&#xD;
            ollamaTempHttpRequestBody&#xD;
    );&#xD;
&#xD;
The &amp;#034;Options&amp;#034; portion of the request is built much the same way, as are the image and prompt parsing functions. This is done to allow easy extensibility - simply include an additional Boolean flag and pass the prompt or image to a manipulation function.&#xD;
&#xD;
**Saving Information**&#xD;
&#xD;
The notebook will save the contents of each query, and can be further extended to save further information by passing variables to Current Query Association variable (such as image sizes and CRC32 file hashes), as demonstrated below in the image builder.&#xD;
&#xD;
This function will take an input of a list of paths of images, and first import the files so the files can have information saved (such as the size and hash), and then are converted into raw images so they can be manipulated, resized and the like, and then re-exported into JPG format for use as input into Ollama:&#xD;
&#xD;
    ollamaInputFuncImageList := (&#xD;
       (* Appends the image paths to the query *)&#xD;
       ollamaVarCurrentQueryAssociation = &#xD;
        Append[ollamaVarCurrentQueryAssociation, &#xD;
         &amp;#034;imagePaths&amp;#034; -&amp;gt; ollamaVarImagePathsString];&#xD;
       &#xD;
       (* Splits the single string list of files up at the semicolons \&#xD;
    into a list of file paths *)&#xD;
       ollamaTempFilePathsList = &#xD;
        ollamaFuncGetImagePathsStringList[ollamaVarImagePathsString];&#xD;
       &#xD;
       (* Entire image files are imported as binary objects *)&#xD;
       ollamaTempImageFileList = &#xD;
        ByteArray /@ (Import[#, &amp;#034;Byte&amp;#034;] &amp;amp; /@ ollamaTempFilePathsList);&#xD;
       &#xD;
       (* Appends the size of the images to the current query association \&#xD;
    *)&#xD;
       ollamaVarCurrentQueryAssociation = &#xD;
        Append[ollamaVarCurrentQueryAssociation,&#xD;
         &amp;#034;imageFileSizes&amp;#034; -&amp;gt; (Length[#] &amp;amp; /@ ollamaTempImageFileList)];&#xD;
       &#xD;
       (* Also appends a list of file hashes *)&#xD;
       ollamaVarCurrentQueryAssociation = &#xD;
        Append[ollamaVarCurrentQueryAssociation,&#xD;
         &amp;#034;imageHashesCRC32&amp;#034; -&amp;gt; (ollamaFuncImageFileHashString[#, &#xD;
              &amp;#034;CRC32&amp;#034;] &amp;amp; /@ ollamaTempImageFileList)];&#xD;
       &#xD;
       (* The binary object image files are imported again in the image \&#xD;
    format, so it is now editable by image functions *)&#xD;
       ollamaTempImagesList = &#xD;
        ImportByteArray[#] &amp;amp; /@ ollamaTempImageFileList;&#xD;
       &#xD;
       (* This runs all the edits we want to apply to our images *)&#xD;
       ollamaTempImagesList = &#xD;
        ollamaFuncAlterImage[#] &amp;amp; /@ ollamaTempImagesList;&#xD;
       &#xD;
       (* Returns the list of images for inclusion in the HTTP request *)&#xD;
    &#xD;
       &#xD;
       ToCharacterCode[ExportString[#, &amp;#034;JPG&amp;#034;]] &amp;amp; /@ ollamaTempImagesList);&#xD;
&#xD;
**Receiving Streaming Responses**&#xD;
&#xD;
On URL submission, the Ollama server will begin returning responses. HTTP requests can be manually submitted via the use of the URL Submit function (however this notebook will call the URL Submit function with a number of other helper functions):&#xD;
&#xD;
    ollamaVarResponseTask = URLSubmit[&#xD;
       ollamaHttpRequest[ollamaTempHttpRequestBody],&#xD;
       HandlerFunctions -&amp;gt; &amp;lt;|&#xD;
         &amp;#034;HeadersReceived&amp;#034; -&amp;gt; (ollamaFuncHandlerHeaders[#Headers] &amp;amp;),&#xD;
         &amp;#034;BodyChunkReceived&amp;#034; -&amp;gt; (ollamaFuncHandlerBodyChunks[#BodyChunk] \&#xD;
    &amp;amp;),&#xD;
         &amp;#034;ConnectionFailed&amp;#034; -&amp;gt; (Print[&#xD;
             &amp;#034;Connection Failed: Ollama is probably not running.&amp;#034;] &amp;amp;),&#xD;
         &amp;#034;TaskFinished&amp;#034; -&amp;gt; (ollamaFuncHandlerTaskFinished &amp;amp;),&#xD;
         &amp;#034;TaskStatusChanged&amp;#034; -&amp;gt; (ollamaFuncHandlerTaskInterrupt[#Task, \&#xD;
    #TaskStatus] &amp;amp;)&#xD;
         |&amp;gt;,&#xD;
       HandlerFunctionsKeys -&amp;gt; {&amp;#034;BodyChunk&amp;#034;, &amp;#034;Headers&amp;#034;, &amp;#034;Task&amp;#034;, &#xD;
         &amp;#034;TaskStatus&amp;#034;}];&#xD;
&#xD;
&#xD;
When setting up the URL Submit, you will *want* to save the URLSubmit command to a variable to keep track of the &amp;#034;task&amp;#034;. This task variable may be used later to interrupt the query by the use of the &amp;#034;TaskRemove&amp;#034; function.&#xD;
&#xD;
For a streaming response, URL Submit will need to be provided with &amp;#034;handler functions&amp;#034;, and &amp;#034;handler function keys&amp;#034;.&#xD;
&#xD;
Handler functions are called when certain HTTP events take place, such as a body chunk is received (usually containing a single token), when the response is finished, interrupted, when headers are received, etc.. Handler function keys are values passed with the event.&#xD;
&#xD;
A simple example is the headers handler, which just saves the returned headers into the current query association under the &amp;#034;headers&amp;#034; key:&#xD;
&#xD;
    ollamaFuncHandlerHeaders[&#xD;
       headers_] := (ollamaVarCurrentQueryAssociation = &#xD;
         Append[ollamaVarCurrentQueryAssociation, &amp;#034;headers&amp;#034; -&amp;gt; headers];);&#xD;
&#xD;
It is okay to receive responses just as a string without attempting to import them from JSON into an association, especially when debugging.&#xD;
&#xD;
**Issues &amp;amp; Future Work**&#xD;
&#xD;
There may be some issues with the body chunks received. Some may be sent back empty, and some may be sent back incomplete (with the completed portions sent in subsequent body chunk responses). The notebook attached will parse some of these issues, but it seems like some new models can introduce new issues.&#xD;
&#xD;
There are further notes within the notebook detailing how to tell if it&amp;#039;s running, how to handle crashes and the like. Mostly you&amp;#039;ll want to check your graphics usage, specifically the &amp;#034;Cuda&amp;#034; usage, but there are other signs things are working or not.&#xD;
&#xD;
&#xD;
Please feel free to extend &amp;amp; upload the attached notebook at will. I won&amp;#039;t be adding features, but if there are errors or bugs I may fix them &amp;amp; reupload (it&amp;#039;s a lot of code, I&amp;#039;m sure I&amp;#039;ve missed some things, but I feel like this is good enough to publish at present).&#xD;
&#xD;
# Setup and usage details&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][4]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Image20241018183644.jpg&amp;amp;userId=20103&#xD;
  [2]: http://ollama.com&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=EnvironmentVariables.png&amp;amp;userId=2392475&#xD;
  [4]: https://www.wolframcloud.com/obj/68e4cc4b-ea49-495f-8540-215467295fc6</description>
    <dc:creator>Cameron Kosina</dc:creator>
    <dc:date>2024-06-29T06:07:36Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2308671">
    <title>Solving computationally the &amp;#034;True Genius: Grecian Computer&amp;#034; puzzle</title>
    <link>https://community.wolfram.com/groups/-/m/t/2308671</link>
    <description>*Disclaimer: I&amp;#039;m not a mathematician. I&amp;#039;m merely a hobbyist that loves programming and puzzles. Professionally, I work in IT management.*&#xD;
&#xD;
For my birthday this year, my young nephew (much aware of my love for puzzles) gifted me a wooden brainteaser called &amp;#034;Grecian Computer&amp;#034; from the brand [True Genius][1].&#xD;
&#xD;
[![enter image description here][2]][3]&#xD;
&#xD;
&#xD;
As described on the box, the goal is to &amp;#034;Turn the dials until all 12 columns add up to 42.&amp;#034; Rather than faffing about with trial and error, I figured it would be much more fun and educational to try my hand at writing a bit of Wolfram Language code to produce the solution.&#xD;
&#xD;
My first step was to disassemble the puzzle to understand its structure: five &amp;#034;dials&amp;#034;, the bottom of which remains fixed in place while the remaining four may rotate through twelve positions. Each dial effectively contains a 4x12 matrix comprised of numbers and &amp;#034;holes&amp;#034; where numbers from lower dials may show through.&#xD;
[![enter image description here][4]][5]&#xD;
&#xD;
[![enter image description here][6]][7]&#xD;
&#xD;
[![enter image description here][8]][9]&#xD;
&#xD;
&#xD;
[![enter image description here][10]][11]&#xD;
&#xD;
&#xD;
[![enter image description here][12]][13]&#xD;
&#xD;
Using the Wolfram Language&amp;#039;s functions for handling lists of lists, the puzzle seems readily represented as a three dimensional array: five layers, each with four rows of twelve columns. Here, I represent &amp;#034;holes&amp;#034; as zeroes:&#xD;
&#xD;
    puzzle = {{{8, 3, 4, 12, 2, 5, 10, 7, 16, 8, 7, 8}, {4, 4, 6, 6, 3, 3,&#xD;
          14, 14, 21, 21, 9, 9}, {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, &#xD;
         15}, {11, 11, 14, 11, 14, 11, 14, 14, 11, 14, 11, 14}}, {{1, 0, &#xD;
         9, 0, 12, 0, 6, 0, 10, 0, 10, 0}, {3, 26, 6, 0, 2, 13, 9, 0, 17, &#xD;
         19, 3, 12}, {9, 20, 12, 3, 6, 0, 14, 12, 3, 8, 9, 0}, {7, 0, 9, &#xD;
         0, 7, 14, 11, 0, 8, 0, 16, 2}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &#xD;
         0, 0}, {22, 0, 16, 0, 9, 0, 5, 0, 10, 0, 8, 0}, {11, 26, 14, 1, &#xD;
         12, 0, 21, 6, 15, 4, 9, 18}, {17, 4, 5, 0, 7, 8, 9, 13, 9, 7, 13,&#xD;
          21}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, &#xD;
         0, 0, 0, 0, 0, 0}, {14, 0, 9, 0, 12, 0, 4, 0, 7, 15, 0, 0}, {11, &#xD;
         6, 11, 0, 6, 17, 7, 3, 0, 6, 0, 11}}, {{0, 0, 0, 0, 0, 0, 0, 0, &#xD;
         0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, &#xD;
         0, 0, 0, 0, 0, 0, 0, 0}, {7, 0, 15, 0, 8, 0, 3, 0, 6, 0, 10, &#xD;
         0}}};&#xD;
Next, we need to create a table of all of the possible permutations, rotating each of the four moving dials through its twelve possible positions, like a clock. I calculated there should be 20,736 possible permutations: 1x12x12x12x12:&#xD;
&#xD;
    puzzlePermutations = &#xD;
      Flatten[&#xD;
       Table[{puzzle[[1]], RotateRight[puzzle[[2]], {0, a}], &#xD;
         RotateRight[puzzle[[3]], {0, b}], &#xD;
         RotateRight[puzzle[[4]], {0, c}], &#xD;
         RotateRight[puzzle[[5]], {0, d}]}, {a, 0, 11}, {b, 0, 11}, {c, 0,&#xD;
          11}, {d, 0, 11}], 3];&#xD;
&#xD;
    Length[puzzlePermutations]&#xD;
&#xD;
The next step was to &amp;#034;lift&amp;#034; the numbers from the lower dials to fill in the &amp;#034;holes&amp;#034; represented as zeroes:&#xD;
&#xD;
    Do[puzzlePermutations[[x]][[i]] = &#xD;
       ReplacePart[puzzlePermutations[[x]][[i]], &#xD;
        AssociationThread[&#xD;
         Position[puzzlePermutations[[x]][[i]], 0] -&amp;gt; &#xD;
          Extract[puzzlePermutations[[x]][[i - 1]], &#xD;
           Position[puzzlePermutations[[x]][[i]], 0]]]], {x, &#xD;
       Length[puzzlePermutations]}, {i, 2, 5}];&#xD;
&#xD;
From here, we just need to select the permutation(s) for which the columns in the top layer all add up to 42:&#xD;
&#xD;
    solution = Select[puzzlePermutations, ContainsExactly[Total@#[[5]], {42}] &amp;amp;];&#xD;
&#xD;
This produces the sole solution to the puzzle, and we can see how we should turn each dial to solve it:&#xD;
&#xD;
    Array[MatrixForm[solution[[1]][[#]]] &amp;amp;, 5]&#xD;
&#xD;
![Array representing the solution.][14]&#xD;
&#xD;
Finally, thanks to a bit of Wolfram Language code, the solved puzzle:&#xD;
&#xD;
[![enter image description here][16]][15]&#xD;
&#xD;
I had fun working through this. I&amp;#039;m sure there are more efficient or elegant ways to write this code and solve the puzzle, and I&amp;#039;d love to hear your thoughts.&#xD;
&#xD;
Thanks for reading!&#xD;
&#xD;
Christopher&#xD;
&#xD;
&#xD;
  [1]: https://www.projectgeniusinc.com/true-genius-collection&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=15291.jpg&amp;amp;userId=20103&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4078.png&amp;amp;userId=241091&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=101442.jpg&amp;amp;userId=20103&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4071.png&amp;amp;userId=241091&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=58813.jpg&amp;amp;userId=20103&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4072.png&amp;amp;userId=241091&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=97954.jpg&amp;amp;userId=20103&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4073.png&amp;amp;userId=241091&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=31935.jpg&amp;amp;userId=20103&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4074.png&amp;amp;userId=241091&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=61306.jpg&amp;amp;userId=20103&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4076.png&amp;amp;userId=241091&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=solutionarray.png&amp;amp;userId=241091&#xD;
  [15]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4069.png&amp;amp;userId=241091&#xD;
  [16]: https://community.wolfram.com//c/portal/getImageAttachment?filename=64797.jpg&amp;amp;userId=20103</description>
    <dc:creator>Christopher Fox</dc:creator>
    <dc:date>2021-07-09T15:02:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2829436">
    <title>SpectroGAN soundMap</title>
    <link>https://community.wolfram.com/groups/-/m/t/2829436</link>
    <description>My goal: &#xD;
&#xD;
With great interest in GANs, a series of AI-generated spectrograms are created for further analysis and manipulation.  Spectrograms are visual representations of audio signals, and GANs are machine-learning models used to generate synthetic data that resembles real data. By creating AI-generated spectrograms using GANs, I aim to study and manipulate these visual and sound representations of synthetic audio data. This could potentially have applications in fields such as audio processing and music synthesis. I created an exploratory workflow with a fundamental question in mind: what is music?&#xD;
&#xD;
Description and process:&#xD;
&#xD;
As an artist or musician, one begins by learning the rules and techniques of their craft. However, as one gains more experience and becomes more confident in their abilities, their own personal emotions and intuition begin to play a larger role in their creations. The unique experiences and perspectives that each individual brings to their art form the basis of their own unique voice and style. This blending of technical skill with personal emotion and intuition leads to a creation that is not just technically sound but also reflects the artist&amp;#039;s view of the world and its place within it. In this way, art and music become a reflection not just of technical proficiency, but also of the human experience and emotion. Further research and exploration in this field will shed light on the potential of AI to augment or even change the way we experience and create art and music.&#xD;
&#xD;
This raises the question of what happens when trained machine-learning models generate music and art. How do these AI-generated pieces evoke human emotions and experiences, if at all?&#xD;
&#xD;
Exploratory Workflow:&#xD;
&#xD;
1: Create GANs models&#xD;
![enter image description here][1]&#xD;
&#xD;
2: Feed spectrograms into GANs models to produce AI-generated spectrograms.&#xD;
![enter image description here][2]&#xD;
&#xD;
3: Select 20 samples of the GANs-generated spectrograms by listening to 120 random samples.&#xD;
![enter image description here][3]&#xD;
&#xD;
4. Combine the 20 samples&#xD;
![enter image description here][4]&#xD;
&#xD;
5. Denoise the combined sample&#xD;
![enter image description here][5]&#xD;
&#xD;
6. Further manipulations upon the denoise sample (Fisheye effect and etc)&#xD;
![enter image description here][6]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=image%289%29.png&amp;amp;userId=2829000&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=image%2810%29.png&amp;amp;userId=2829000&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=image%2811%29.png&amp;amp;userId=2829000&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2023-02-12201850.jpg&amp;amp;userId=2829000&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=image%2812%29.png&amp;amp;userId=2829000&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=image%2813%29.png&amp;amp;userId=2829000</description>
    <dc:creator>Yingxuan Ma</dc:creator>
    <dc:date>2023-02-13T01:20:51Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3277715">
    <title>CSockets and LTP: Creating custom communication protocol</title>
    <link>https://community.wolfram.com/groups/-/m/t/3277715</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Main19092024.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/4f3e5b7e-e1ee-4e54-9f83-498f89fbbeef</description>
    <dc:creator>Kirill Belov</dc:creator>
    <dc:date>2024-09-19T13:04:09Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2177967">
    <title>How to install FFmpeg on Windows 10</title>
    <link>https://community.wolfram.com/groups/-/m/t/2177967</link>
    <description>*MODERATOR NOTE:*  &#xD;
*for installing FFmpeg on Linux see this post,*  &#xD;
https://community.wolfram.com/groups/-/m/t/2188963  &#xD;
*for installing on MacOS see this post*  &#xD;
https://community.wolfram.com/groups/-/m/t/2189605&#xD;
&#xD;
----------&#xD;
&#xD;
Video object and video processing functions were introduced in Wolfram Language 12.1. To read from and write to video files, video functionality uses media libraries provided by operating systems as well as a limited version of [FFmpeg][3] that is shipped with the language and can be immediately used. Details and examples showing how to import and export video files can be found in the [Importing &amp;amp; Exporting Video][4] tutorial. The [Codec Support][5] section in that tutorial describes the limitations of the FFmpeg shipped with the language and shows how installing the full version of FFmpeg gets you a better support for audio and video codecs. &#xD;
&#xD;
Without FFmpeg installed, the first time a video function is called a message is displayed, suggesting to install FFmpeg for a more complete codec support. Here is the list of supported video decoders available before having FFmpeg installed. At the end of this post we will compare the list with the supported decoders after FFmpeg is installed.&#xD;
&#xD;
    In[1]:= Length /@ $VideoDecoders&#xD;
    &#xD;
    During evaluation of In[1]:= General::sysffmpeg: Using a limited version of FFmpeg. Install FFmpeg to get more complete codec support.&#xD;
    &#xD;
    Out[1]= &amp;lt;|&amp;#034;AVI&amp;#034; -&amp;gt; 37, &amp;#034;Matroska&amp;#034; -&amp;gt; 55, &amp;#034;MP4&amp;#034; -&amp;gt; 13, &amp;#034;Ogg&amp;#034; -&amp;gt; 1,  &amp;#034;QuickTime&amp;#034; -&amp;gt; 23, &amp;#034;VideoFormat&amp;#034; -&amp;gt; 83|&amp;gt;&#xD;
&#xD;
In this post I will show how to install and configure FFmpeg on Windows 10.&#xD;
&#xD;
First, download a 64-bit shared (not static) build of FFmpeg 4.0.0 or later. Links to Windows builds are available at https://ffmpeg.org/download.html#build-windows. Get a zip file with win64-gpl-shared suffix (any file with that suffix will work, but here I want to install the latest stable version):         &#xD;
![enter image description here][6]&#xD;
Once the zip file is downloaded, we need to extract its contents to a home directory. There will be four subdirectories in the extracted FFmpeg directory: bin, doc, include and lib. FFmpeg is now installed. &#xD;
&#xD;
In the final step we need to modify **Path** environment variable. &#xD;
Open the Start Search, type in &amp;#034;env&amp;#034;, and choose **Edit environment variables for your account**: &#xD;
![enter image description here][7]&#xD;
&#xD;
Then, select **Path** environment variable and click **Edit...**:&#xD;
![enter image description here][8]&#xD;
&#xD;
Finally, Click **New** and add a path to your FFmpeg directory including **bin** subdirectory:&#xD;
![enter image description here][9]&#xD;
Click **OK** and restart Wolfram Language. When you evaluate `$VideoDecoders` again, you should see the list that contains many codecs not available before:&#xD;
&#xD;
    In[1]:= Length /@ $VideoDecoders&#xD;
    &#xD;
    Out[1]= &amp;lt;|&amp;#034;AVI&amp;#034; -&amp;gt; 160, &amp;#034;Matroska&amp;#034; -&amp;gt; 260, &amp;#034;MP4&amp;#034; -&amp;gt; 34, &amp;#034;Ogg&amp;#034; -&amp;gt; 1,  &amp;#034;QuickTime&amp;#034; -&amp;gt; 70, &amp;#034;VideoFormat&amp;#034; -&amp;gt; 327|&amp;gt;&#xD;
&#xD;
Another way to confirm that the full version of FFmpeg is used by Wolfram Language:&#xD;
&#xD;
    In[2]:= FFmpegTools`$SystemFFmpegQ&#xD;
    &#xD;
    Out[2]= True&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com/groups/-/m/t/2188963&#xD;
  [2]: https://community.wolfram.com/groups/-/m/t/2189605&#xD;
  [3]: https://ffmpeg.org/&#xD;
  [4]: https://reference.wolfram.com/language/tutorial/ImportingAndExportingVideo.html&#xD;
  [5]: https://reference.wolfram.com/language/tutorial/ImportingAndExportingVideo.html#1156435029&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ffmpegBuilds.png&amp;amp;userId=32329&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=env1.png&amp;amp;userId=32329&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=env2.png&amp;amp;userId=32329&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=env3.png&amp;amp;userId=32329</description>
    <dc:creator>Piotr Wendykier</dc:creator>
    <dc:date>2021-01-29T08:50:12Z</dc:date>
  </item>
</rdf:RDF>

