<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>URage</title>
	<atom:link href="https://urage.net/blog/author/rainer/feed/" rel="self" type="application/rss+xml" />
	<link>https://urage.net/blog/author/rainer/</link>
	<description>Hating Unity? So we do - Help rage with us!</description>
	<lastBuildDate>Wed, 17 Dec 2025 01:47:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://urage.net/wp-content/uploads/2024/05/cropped-unityrage-logo-e1722825408774-32x32.png</url>
	<title>URage</title>
	<link>https://urage.net/blog/author/rainer/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Create Low poly Model from High poly</title>
		<link>https://urage.net/blog/create-low-poly-model-from-high-poly/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Fri, 31 Oct 2025 15:07:31 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://urage.net/?p=6401</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/create-low-poly-model-from-high-poly/">Create Low poly Model from High poly</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element wpb_animate_when_almost_visible wpb_fadeIn fadeIn" >
		<div class="wpb_wrapper">
			<p>There are multiple Remeshing options in Blender which are great for many cases. But unfortunately when it comes to Lowpoly models, none of the remeshing options really result in what we expected to see.</p>
<h3>Generated (fake low poly):</h3>
<h3>Remeshed (QuadriFlow):</h3>
<h3>Remeshed (Quad Remesher):</h3>
<p>So how do we deal with this? Don&#8217;t worry, it&#8217;s easier than u thought, the answer is to just decimate the faces.</p>
<p>If you want to remesh a highpoly model to a real, blocky/lowpoly styled mesh, all you need is the <strong>Decimate modifier.</strong></p>
<p>But wait, remeshing your model before might still be a good idea to create a better high poly model first, especially when your model has issues like missing faces.</p>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element wpb_animate_when_almost_visible wpb_fadeInUp fadeInUp" >
		<div class="wpb_wrapper">
			<h2>Create Low Poly Model</h2>
<ol>
<li>Make a copy of your High poly Model</li>
<li>Merge Vertices</li>
<li>Decimate (Symmetry X + Triangulate)</li>
<li>Merge Vertices (just to be sure)</li>
<li>(optional) Ctrl+T to triangulate (if not done yet with Decimate modifier)</li>
</ol>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element wpb_animate_when_almost_visible wpb_fadeInUp fadeInUp" >
		<div class="wpb_wrapper">
			<h2>Texturize Low Poly Model</h2>
<ol>
<li>Make sure Topology fits your needs for texturing</li>
<li>Create a Color Palette Texture from your Albedo Map</li>
</ol>
<ol>
<li>
<ul>
<li>with my AutoPaletteTexture-Addon for Blender</li>
<li>Online</li>
</ul>
</li>
<li>Create a new Material (append it, don&#8217;t remove the old material yet)</li>
<li>Add the Color Palette Texture to your Material as Albedo Map</li>
<li>Assign faces step by step to new Material (make sure it&#8217;s selected) and to UV Unwrap for the newly assigned faces</li>
<li>If needed, readjust vertices/edges by double clicking G and grab on a desired axis</li>
</ol>
<h1>🚀 Scaling and Snapping UVs to a Clustered Palette in Blender</h1>
<p>Working with textures and UVs in Blender can be a tedious task, especially when you want consistent color mapping across complex meshes. Recently, I dove into creating a <strong>Blender addon</strong> that allows you to scale UV islands and snap faces to a clustered color palette. Here’s a summary of the process, the challenges, and the solutions we implemented.</p>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"><div class="vc_separator wpb_content_element vc_separator_align_center vc_sep_width_100 vc_sep_border_width_2 vc_sep_pos_align_center vc_separator_no_text vc_sep_color_pink wpb_content_element  wpb_content_element" ><span class="vc_sep_holder vc_sep_holder_l"><span class="vc_sep_line"></span></span><span class="vc_sep_holder vc_sep_holder_r"><span class="vc_sep_line"></span></span>
</div>
	<div class="wpb_text_column wpb_content_element wpb_animate_when_almost_visible wpb_fadeInUp fadeInUp" >
		<div class="wpb_wrapper">
			<h2>🎯 The Goal</h2>
<p>The main goal was to create a tool that:</p>
<ol>
<li><strong>Scales individual UV islands</strong> for better layout control.</li>
<li><strong>Samples colors from textures</strong> and clusters them into a limited palette.</li>
<li><strong>Snaps each face’s UVs</strong> to the palette colors, making texture maps uniform and easier to work with.</li>
</ol>
<p>This is particularly useful in stylized texturing workflows, game-ready assets, or when creating modular assets with consistent color blocks.</p>
<hr>
<h2>🔍 Challenges &amp; Learning Points</h2>
<h3>1. Sampling Colors Efficiently</h3>
<p>Initially, the code tried to copy the entire original texture to sample colors. This caused <strong>memory issues</strong> and extremely slow performance on large images.</p>
<p><strong>Solution:</strong></p>
<ul>
<li>Create a temporary copy of the image.</li>
<li>Scale it down to a maximum resolution (e.g., 512px) for faster color sampling.</li>
<li>Sample colors from this smaller version while maintaining correct UV mapping.</li>
</ul>
<p>This drastically reduced processing time without sacrificing much visual accuracy.</p>
<hr>
<h3>2. Handling Blender Image Pixels</h3>
<p>Blender’s <code>Image.pixels</code> array has a <strong>fixed size</strong>, and directly assigning a list of a different length caused a <code>ValueError</code>.</p>
<p><strong>Solution:</strong></p>
<ul>
<li>Create a temporary image with the same size as the original.</li>
<li>Copy pixels first, then scale it internally using <code>image.scale()</code>.</li>
</ul>
<p>This approach safely resized the texture without errors.</p>
<hr>
<h3>3. UV Island Scaling</h3>
<p>Scaling UV islands individually required identifying <strong>connected UV islands</strong>. This involved:</p>
<ul>
<li>Iterating over selected faces.</li>
<li>Using a stack-based search to collect connected faces sharing UVs.</li>
<li>Scaling the UVs relative to their center.</li>
</ul>
<p>This ensures each island scales proportionally without affecting others.</p>
<hr>
<h3>4. K-Means Color Clustering</h3>
<p>To reduce the texture’s colors to a limited palette, we implemented a <strong>simple k-means clustering</strong> algorithm:</p>
<ul>
<li>Initialize <code>k</code> cluster centers from sampled colors.</li>
<li>Iterate several times to assign colors to clusters.</li>
<li>Compute cluster averages to define final palette colors.</li>
</ul>
<p>This gives users control over the <strong>number of colors</strong> and ensures a consistent color palette.</p>
<hr>
<h3>5. User Options for Performance vs Accuracy</h3>
<p>During testing, we noticed that using a <strong>downscaled image</strong> sometimes produced slightly different results.</p>
<p><strong>Solution:</strong> Add a <strong>checkbox</strong> in the UI:</p>
<ul>
<li>✅ Use downscaled image → faster but approximate.</li>
<li>❌ Use full-resolution image → slower but exact.</li>
</ul>
<p>Additionally, users can set a <strong>maximum resolution</strong> for downscaled images, allowing them to balance speed and accuracy.</p>
<hr>
<h2>🛠️ Blender Operator UI</h2>
<p>The final addon exposes these controls in the UV editor:</p>
<pre><code>UV Island Scale: [0.1]
Max Colors: [16]
Block Size: [8]
☑ Use Downscaled Image
    Downscale Max Size: [512]
</code></pre>
<ul>
<li><strong>UV Island Scale:</strong> How much to scale each UV island.</li>
<li><strong>Max Colors:</strong> Number of colors in the clustered palette.</li>
<li><strong>Block Size:</strong> Size of each color block in the generated palette texture.</li>
<li><strong>Use Downscaled Image:</strong> Toggle between fast approximate sampling and full-res sampling.</li>
<li><strong>Downscale Max Size:</strong> Maximum resolution for downscaled texture sampling.</li>
</ul>
<hr>
<h2>✅ Key Takeaways</h2>
<ol>
<li><strong>Always respect Blender’s fixed array sizes</strong> when modifying images.</li>
<li><strong>Temporary downscaled textures</strong> are a simple and effective performance hack.</li>
<li><strong>UV islands can be scaled independently</strong> by finding connected faces.</li>
<li><strong>K-means clustering</strong> is a practical method for reducing color complexity.</li>
<li><strong>User options for performance vs accuracy</strong> make the tool flexible and user-friendly.</li>
</ol>
<p>The Voxel Remesh Modifier can still be useful, for example to quickly fix holes or other issues in your mesh.<br />
You can then (optional: unsubdivide) and decimate the mesh afterwards.</p>
<p>This tool can also create pixel-art versions of an existing image:</p>
<ol>
<li>Add a Plane</li>
<li>Add Texture to Plane Material</li>
<li>Add Multiresolution Modifier</li>
<li>Click &#8220;Simple&#8221; 5-6 times</li>
<li>Apply the Modifier</li>
<li>Go to Edit Mode and check if topology suits your needs</li>
<li>If it&#8217;s too less yet: start over with <strong>step 3</strong></li>
<li>Run LowpolyUV</li>
</ol>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/create-low-poly-model-from-high-poly/">Create Low poly Model from High poly</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Building a Multiplayer Game with FishNet &#038; Unity Relay</title>
		<link>https://urage.net/blog/building-a-multiplayer-game-with-fishnet-unity-relay/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 12:05:08 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://urage.net/?p=6140</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/building-a-multiplayer-game-with-fishnet-unity-relay/">Building a Multiplayer Game with FishNet &#038; Unity Relay</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>Multiplayer games are more accessible than ever, thanks to tools like <strong>FishNet</strong> and <strong>Unity Relay</strong>. In this guide, we’ll explore how to:</p>
<ul>
<li>✅ Set up <strong>FishNet</strong> with <strong>Unity Transport (UTP)</strong></li>
<li>✅ Use <strong>Unity Relay</strong> for seamless P2P connections</li>
<li>✅ Host and join games with <strong>join codes</strong></li>
<li>✅ Optimize networking for a <strong>3D fishnet-style game</strong></li>
</ul>
<p>key resources:</p>
<ul>
<li><a href="https://github.com/ooonush/FishyUnityTransport/releases/tag/2.0.0-pre.2">FishyUnityTransport 2.0.0-pre.2</a> (Relay-compatible transport)</li>
<li><a href="https://github.com/maxkratt/fish-networking-getting-started/tree/master/Assets">Fish-Networking Getting Started</a> (Sample project)</li>
</ul>
<h2>Why FishNet + Unity Relay?</h2>
<p>FishNet is a <strong>high-performance</strong> networking solution for Unity, while <strong>Unity Relay</strong> solves NAT traversal without dedicated servers. Together, they enable:</p>
<ul>
<li><strong>P2P connections</strong> without port forwarding.</li>
<li><strong>Cross-platform play</strong> (PC, mobile, consoles).</li>
<li><strong>Secure connections</strong> via Relay’s encrypted tunnels.</li>
</ul>
<h2>Setting Up FishNet with Unity Transport</h2>
<h3>Installation</h3>
<ol>
<li>Install <strong>FishNet</strong> via the [Asset Store](https://assetstore.unity.com/packages/tools/network/fish-net-networking-evolved-207815).</li>
<li>Add FishyUnityTransport:
<ul>
<li>Download [FishyUnityTransport 2.0.0-pre.2](https://github.com/ooonush/FishyUnityTransport/releases/tag/2.0.0-pre.2).</li>
<li>Import it into your project (`FishNet → Import Transport`).</li>
</ul>
</li>
<li>Configure Transport:
<ul>
<li>&nbsp;In `FishNet Manager`, assign <strong>FishyUnityTransport</strong>.</li>
<li>Set <strong>Protocol Type</strong> to `Relay` for UTP + Relay support.</li>
</ul>
</li>
</ol>
<h2>Conclusion</h2>
<p>With <strong>FishNet + Unity Relay</strong>, you can build <strong>scalable, secure</strong> multiplayer games without complex server setups. Try it in your next project!</p>
<p><strong>Resources</strong>:</p>
<ul>
<li>[FishyUnityTransport GitHub](https://github.com/ooonush/FishyUnityTransport)</li>
<li>[Fish-Networking Starter Project](https://github.com/maxkratt/fish-networking-getting-started)</li>
</ul>
<h2>Integrating Unity Relay</h2>
<h3>Step 1: Install Required Unity Packages</h3>
<p><strong>Unity Packages (via Package Manager)</strong></p>
<ul>
<li>com.unity.transport</li>
<li>com.unity.services.relay</li>
<li>com.unity.services.authentication</li>
</ul>
<h3>Step 2: Authenticate Players</h3>
<p>Before hosting/joining, authenticate anonymously:</p>
<h3>Step 3: Host a Game</h3>
<p>&nbsp;</p>
<h3>Step 4: Join a Game</h3>
<p>&nbsp;</p>
<h2>Key Scripts for Multiplayer</h2>
<h3>Networked Player Movement</h3>
<p>&nbsp;</p>
<p>&#8211; <strong>Check Relay Dashboard</strong>: Monitor allocations in [Unity Gaming Services](https://dashboard.unity3d.com/).<br />
&#8211; <strong>Logs</strong>: Debug with `Debug.Log` or `NetworkManager.Logging`.</p>
<h2>Performance Tips</h2>
<p>&#8211; **Optimize Bandwidth**: Use `[Networked]` sparingly.<br />
&#8211; **Lag Compensation**: Implement client-side prediction if needed.<br />
&#8211; **Scale with Relay**: Upgrade for more CCUs (concurrent users).</p>
<h3>Synchronized Fish Net (Server Authority)</h3>
<p>&nbsp;</p>
<h2>Testing &amp; Debugging</h2>
<p><strong>Use ParrelSync</strong>: Test multiplayer in the editor with cloned instances.</p>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/building-a-multiplayer-game-with-fishnet-unity-relay/">Building a Multiplayer Game with FishNet &#038; Unity Relay</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Generate Scripts at Runtime in Unity</title>
		<link>https://urage.net/blog/generate-scripts-at-runtime-in-unity/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 11:35:16 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://urage.net/?p=6229</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/generate-scripts-at-runtime-in-unity/">Generate Scripts at Runtime in Unity</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>&nbsp;</p>
<div style="width: 1170px;" class="wp-video"><video class="wp-video-shortcode" id="video-6229-1" width="1170" height="623" preload="metadata" controls="controls"><source type="video/mp4" src="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime.mp4?_=1" /><a href="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime.mp4">https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime.mp4</a></video></div><br />
<div style="width: 1170px;" class="wp-video"><video class="wp-video-shortcode" id="video-6229-2" width="1170" height="623" preload="metadata" controls="controls"><source type="video/mp4" src="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime2.mp4?_=2" /><a href="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime2.mp4">https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime2.mp4</a></video></div>
<pre></pre>
<p>&nbsp;</p>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/generate-scripts-at-runtime-in-unity/">Generate Scripts at Runtime in Unity</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime.mp4" length="515740" type="video/mp4" />
<enclosure url="https://urage.net/wp-content/uploads/2025/10/generate_scripts_at_runtime2.mp4" length="591064" type="video/mp4" />

			</item>
		<item>
		<title>Setting Up ComfyUI with Hunyuan3DWrapper on Windows (GPU + CUDA 12.6)</title>
		<link>https://urage.net/blog/generate-texturized-3d-models-with-comfyui-hunyuan3d-a-complete-guide/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Fri, 29 Aug 2025 09:04:28 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://urage.net/?p=6168</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/generate-texturized-3d-models-with-comfyui-hunyuan3d-a-complete-guide/">Setting Up ComfyUI with Hunyuan3DWrapper on Windows (GPU + CUDA 12.6)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>Installing <strong>Hunyuan3DWrapper</strong> can be tricky, especially if you want to <strong>texturize 3D models</strong>. Prebuilt rasterizer wheels may fail on certain GPUs, and DLL errors are common. This guide walks you step-by-step through a <strong>reliable setup</strong>.</p>
<p><a href="https://docs.comfy.org/tutorials/3d/hunyuan3D-2">https://docs.comfy.org/tutorials/3d/hunyuan3D-2</a></p>
<p><iframe title="How to use ComfyUI for beginners." width="1170" height="658" src="https://www.youtube.com/embed/23VkGD-4uwk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<hr>
<p>&nbsp;</p>
<h2>💻 Ready-to-Run Setup Script</h2>
<p><strong>Windows</strong> (Install_ComfyUI_with_Hunyuan3D-2.bat)</p>
<p>&nbsp;</p>
<h2><strong>1️⃣</strong><strong> System Prerequisites</strong></h2>
<table>
<thead>
<tr>
<th>Component</th>
<th>Version / Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>CUDA Toolkit</td>
<td><a href="https://developer.nvidia.com/cuda-12-6-0-download-archive">12.6 (runtime DLLs accessible)</a></td>
</tr>
<tr>
<td>NVIDIA GPU Driver</td>
<td><a href="https://www.nvidia.com/en-us/software/nvidia-app/">Latest compatible with CUDA 12.6</a></td>
</tr>
<tr>
<td>Python</td>
<td><a href="https://www.python.org/downloads/release/python-31211/">3.12.11 (64-bit)</a></td>
</tr>
<tr>
<td>Git</td>
<td><a href="https://git-scm.com/downloads/win">Recent version</a></td>
</tr>
<tr>
<td>Windows</td>
<td>10/11, 64-bit</td>
</tr>
<tr>
<td>Visual C++ Redistributable (x64)</td>
<td><a href="https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170">2022</a></td>
</tr>
</tbody>
</table>
<blockquote><p>
⚠️ Missing any of these can lead to <strong>DLL load errors</strong>.
</p></blockquote>
<p><strong>Make sure you have a ton of free space available in your Disk:</strong></p>
<ul>
<li>Python venv: ~6GB</li>
<li>ComfyUI: ~375MB (without models) ~45GB (with models)</li>
</ul>
<hr>
<h2><strong>2️⃣ Python Virtual Environment</strong></h2>
<p>Run in the <strong>root directory</strong> where <code>python_embeded</code> is located:</p>
<pre><code class="language-bat">python_embeded\python.exe -m venv venv
call venv\Scripts\activate
</code></pre>
<hr>
<h2><strong>3️⃣ PyTorch 2.6 + CUDA 12.6</strong></h2>
<p>Run <strong>inside the activated venv</strong>, in any directory:</p>
<pre><code class="language-bat">pip install torch==2.6.0+cu126 torchvision==0.21.0+cu126 torchaudio==2.6.0+cu126 --extra-index-url https://download.pytorch.org/whl/cu126
</code></pre>
<hr>
<h2><strong>4️⃣ Install ComfyUI and Hunyuan3DWrapper</strong></h2>
<p>Run in the <strong>root directory</strong> where <code>ComfyUI</code> folder exists:</p>
<pre><code class="language-bat">git clone https://github.com/comfyanonymous/ComfyUI.git
git clone https://github.com/kijai/ComfyUI-Hunyuan3DWrapper.git ComfyUI\custom_nodes\ComfyUI-Hunyuan3DWrapper

pip install -r ComfyUI\requirements.txt
pip install -r ComfyUI\custom_nodes\ComfyUI-Hunyuan3DWrapper\requirements.txt
pip install transparent_background

:: Optional prebuilt rasterizer wheel
pip install ComfyUI\custom_nodes\ComfyUI-Hunyuan3DWrapper\wheels\custom_rasterizer-0.1.0+torch260.cuda126-cp312-cp312-win_amd64.whl
</code></pre>
<hr>
<h2><strong>5️⃣ Build Rasterizer from Source (for 3090 / Ampere)</strong></h2>
<p>Run <strong>inside the folder</strong>:</p>
<pre><code>ComfyUI\custom_nodes\ComfyUI-Hunyuan3DWrapper\custom_rasterizer
</code></pre>
<p>Steps:</p>
<pre><code class="language-bat">set TORCH_CUDA_ARCH_LIST=8.6
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
python -m pip install . --force-reinstall
</code></pre>
<blockquote><p>
✅ Fixes “no kernel image available” and DLL errors.
</p></blockquote>
<hr>
<h2><strong>6️⃣ Launch ComfyUI</strong></h2>
<p>Run in the <strong>root directory</strong> of ComfyUI:</p>
<pre><code class="language-bat">call venv\Scripts\activate
python ComfyUI\main.py --windows-standalone-build
</code></pre>
<hr>
<h2><strong>7️⃣ 3D Model Workflow</strong></h2>
<ol>
<li><strong>Provide Input</strong>
<ul>
<li>2D image (analyzed for depth)</li>
<li>Or rough 3D base shape (sphere, cube, cylinder)</li>
</ul>
</li>
<li><strong>Generate 3D Model</strong>
<ul>
<li>Adjust resolution, mesh detail, textures</li>
<li>Click <strong>Generate</strong></li>
</ul>
</li>
<li><strong>Refine &amp; Texturize</strong>
<ul>
<li>Enhance mesh</li>
<li>Apply custom textures</li>
</ul>
</li>
<li><strong>Export</strong>
<ul>
<li>OBJ, FBX, STL</li>
</ul>
</li>
<li><strong>Blender Cleanup</strong>
<ul>
<li>Merge vertices: <code>M → By Distance</code></li>
<li>Convert triangles to quads: <code>Alt+J</code></li>
<li>Shade Auto Smooth</li>
</ul>
</li>
</ol>
<hr>
<h2><strong>8️⃣ Lessons Learned</strong></h2>
<ul>
<li>Prebuilt wheels can fail; rebuild from source for Ampere GPUs.</li>
<li>Match <strong>PyTorch, CUDA, Python, and wheel versions</strong>.</li>
<li>Use <strong>venv</strong> for isolation.</li>
<li>Ensure <strong>MSVC Build Tools + Ninja</strong> are installed.</li>
</ul>
<hr>
<h2><strong>TL;DR</strong></h2>
<ol>
<li>Install CUDA 12.6, NVIDIA drivers, Git, VC++ redistributable</li>
<li>Use a <strong>venv</strong></li>
<li>Install PyTorch 2.6 + CUDA 12.6, ComfyUI, Hunyuan3DWrapper, transparent_background</li>
<li>If rasterizer fails, <strong>build from source</strong> (<code>TORCH_CUDA_ARCH_LIST=8.6</code>)</li>
<li>Launch ComfyUI from venv</li>
</ol>
<hr>
<h2><strong class="mr-2 flex-self-stretch"><a href="https://github.com/AIGODLIKE/ComfyUI-BlenderAI-node" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame">ComfyUI-BlenderAI-node</a></strong></h2>
<p class="f4 my-3">Used for AI model generation, next-generation Blender rendering engine, texture enhancement&amp;generation (based on ComfyUI)</p>
<p>Download: <a href="https://github.com/AIGODLIKE/ComfyUI-BlenderAI-node">https://github.com/AIGODLIKE/ComfyUI-BlenderAI-node</a></p>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/generate-texturized-3d-models-with-comfyui-hunyuan3d-a-complete-guide/">Setting Up ComfyUI with Hunyuan3DWrapper on Windows (GPU + CUDA 12.6)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ways of Storing Data in Unity: PlayerPrefs, EditorPrefs, and JSON Files</title>
		<link>https://urage.net/blog/ways-of-storing-data-in-unity-playerprefs-editorprefs-and-json-files/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 09:18:13 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[editorprefs]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[playerprefs]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1759</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/ways-of-storing-data-in-unity-playerprefs-editorprefs-and-json-files/">Ways of Storing Data in Unity: PlayerPrefs, EditorPrefs, and JSON Files</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>When developing a game or application in Unity, one of the critical aspects to consider is how to store and manage data. Unity provides several methods to store data, each suited for different use cases. Here, we will explore three common methods: PlayerPrefs, EditorPrefs, and JSON files, and discuss when to use each.</p>
<h2><strong>PlayerPrefs</strong></h2>
<blockquote><p>
<strong>Don&#8217;t save larger data into PlayerPrefs<br />
</strong>
</p></blockquote>
<p><strong>PlayerPrefs </strong>are a simple way to store and access player preferences and other small pieces of data. PlayerPrefs is a key-value storage system, where you can save and retrieve data using string keys.</p>
<p><strong>Common Use Cases:</strong></p>
<ul>
<li>Saving player settings (e.g., audio volume, graphics settings).</li>
<li>Storing player progress or scores.</li>
<li>Remembering simple user preferences.</li>
</ul>
<pre class="wp-block-preformatted">// Retrieve data
int highScore = PlayerPrefs.GetInt("HighScore");
float volume = PlayerPrefs.GetFloat("Volume");
string playerName = PlayerPrefs.GetString("PlayerName");</pre>
<p><strong>Pros:</strong></p>
<ul>
<li>Easy to use and quick to implement.</li>
<li>Built into Unity, no need for external libraries.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Limited data types (int, float, string)
<ul>
<li>Unity PlayerPrefsExtra gives you the ability to save more complexe data types such as : Vectors, Bool, Colors, Lists, &#8230; and it uses the Unity&#8217;s PlayerPrefs under the hood. <a href="https://github.com/herbou/UnityPlayerPrefsExtra">https://github.com/herbou/UnityPlayerPrefsExtra</a></li>
</ul>
</li>
<li>Not suitable for large or complex data.</li>
<li>Data is stored in plain text, which can be easily modified.</li>
</ul>
<h2>EditorPrefs</h2>
<p><strong>EditorPrefs</strong> is similar to PlayerPrefs but is used specifically for storing data related to the Unity Editor. This can be helpful for saving editor-specific settings and preferences that should persist between sessions.</p>
<p><strong>Common Use Cases:</strong></p>
<ul>
<li>Storing custom editor tool settings.</li>
<li>Remembering window positions and sizes in the Unity Editor.</li>
<li>Saving editor preferences.</li>
</ul>
<p><strong>Example:</strong></p>
<p>// Save editor preference<br />
EditorPrefs.SetInt(&#8220;CustomToolWindowX&#8221;, 100);<br />
EditorPrefs.SetFloat(&#8220;CustomToolOpacity&#8221;, 0.8f);<br />
EditorPrefs.SetString(&#8220;LastOpenProject&#8221;, &#8220;/Projects/MyGame&#8221;);</p>
<p>// Retrieve editor preference<br />
int windowX = EditorPrefs.GetInt(&#8220;CustomToolWindowX&#8221;);<br />
float opacity = EditorPrefs.GetFloat(&#8220;CustomToolOpacity&#8221;);<br />
string lastOpenProject = EditorPrefs.GetString(&#8220;LastOpenProject&#8221;);</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Ideal for storing data that should persist across editor sessions.</li>
<li>Easy to use and integrates well with custom editor scripts.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Limited to editor-only data, not suitable for runtime data.</li>
<li>Similar limitations to PlayerPrefs in terms of data types.</li>
</ul>
<h2>JSON Files</h2>
<p><strong>JSON (JavaScript Object Notation)</strong> is a flexible and human-readable format for storing structured data. Unity&#8217;s <code>JsonUtility</code> class can be used to serialize and deserialize objects to and from JSON.</p>
<p><strong>Common Use Cases:</strong></p>
<ul>
<li>Saving game states.</li>
<li>Storing complex configurations or settings.</li>
<li>Sharing data between different parts of the game or with external systems.</li>
</ul>
<p><strong>Example:</strong></p>
<p>[System.Serializable]<br />
public class PlayerData<br />
{<br />
public string playerName;<br />
public int highScore;<br />
public float volume;<br />
}</p>
<p>// Save data to JSON file<br />
PlayerData playerData = new PlayerData { playerName = &#8220;JohnDoe&#8221;, highScore = 100, volume = 0.5f };<br />
string json = JsonUtility.ToJson(playerData);<br />
File.WriteAllText(Application.persistentDataPath + &#8220;/playerData.json&#8221;, json);</p>
<p>// Load data from JSON file<br />
string json = File.ReadAllText(Application.persistentDataPath + &#8220;/playerData.json&#8221;);<br />
PlayerData loadedData = JsonUtility.FromJson(json);</p>
<p><strong>Pros:</strong></p>
<ul>
<li>Supports complex data structures.</li>
<li>Human-readable and easy to debug.</li>
<li>Can be used to share data across different systems.</li>
</ul>
<p><strong>Cons:</strong></p>
<ul>
<li>Requires more code to implement compared to PlayerPrefs and EditorPrefs.</li>
<li>Reading and writing to files can be slower and more error-prone.</li>
</ul>
<h2>Choosing the Right Method</h2>
<p>When deciding which data storage method to use, consider the following:</p>
<ol>
<li><strong>Simplicity vs. Complexity:</strong> For simple, straightforward data like settings and preferences, PlayerPrefs or EditorPrefs are often sufficient. For more complex data, JSON files provide greater flexibility.</li>
<li><strong>Runtime vs. Editor:</strong> Use PlayerPrefs for runtime data and EditorPrefs for editor-specific data.</li>
<li><strong>Data Security:</strong> PlayerPrefs and EditorPrefs store data in plain text, which can be easily modified. For more secure data storage, consider using JSON files with encryption or other secure storage methods.</li>
<li><strong>Data Size:</strong> PlayerPrefs and EditorPrefs are not designed for large amounts of data. For larger or more complex datasets, JSON files are more appropriate.</li>
</ol>
<p>In summary, PlayerPrefs and EditorPrefs offer quick and easy ways to store simple data, ideal for player preferences and editor settings, respectively. JSON files, on the other hand, provide a more robust solution for handling complex and structured data, suitable for saving game states and configurations. Choose the method that best fits your specific needs and the complexity of the data you need to manage.</p>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/ways-of-storing-data-in-unity-playerprefs-editorprefs-and-json-files/">Ways of Storing Data in Unity: PlayerPrefs, EditorPrefs, and JSON Files</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting up a Matrix Server using Ansible and Docker</title>
		<link>https://urage.net/blog/setting-up-a-matrix-server-using-ansible-and-docker/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Sun, 25 Aug 2024 19:00:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ansible]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[element]]></category>
		<category><![CDATA[matrix]]></category>
		<category><![CDATA[synapse]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1838</guid>

					<description><![CDATA[<p>Matrix is an open standard for decentralized communication, and Synapse is its reference implementation. If you want to set up your own [&#8230;]</p>
<p>The post <a href="https://urage.net/blog/setting-up-a-matrix-server-using-ansible-and-docker/">Setting up a Matrix Server using Ansible and Docker</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Matrix is an open standard for decentralized communication, and Synapse is its reference implementation. If you want to set up your own Matrix server, using Docker and Ansible can make the process much smoother. This blog post will guide you through the setup process using the excellent <code>matrix-docker-ansible-deploy</code> repository by Slavi Pantaleev. Along the way, I&#8217;ll share some of my findings and the steps I took to overcome a few hurdles.</p>
<pre>Prerequisites</pre>
<pre><code>sudo lsof -i :80
</code></pre>
<p>Before diving into the setup, ensure your system meets the prerequisites outlined in the official documentation:</p>
<ol>
<li><strong>Clone the Repository</strong>:
<pre><code>git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git
cd matrix-docker-ansible-deploy
</code></pre>
</li>
<li><strong>Install Required Dependencies</strong>:
<ul>
<li>First, ensure you have the necessary tools installed:
<pre><code>sudo apt update
sudo apt install curl git ansible
</code></pre>
<p>Next, install Rust and <code>just</code>, a command runner that makes working with this setup easier:</p>
<pre><code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
git clone https://github.com/casey/just.git
cd just
cargo build --release
sudo mv target/release/just /usr/local/bin/
just --version  # Verify the installation
</code></pre>
</li>
</ul>
</li>
<li><strong>Firewall Configuration</strong>:<br />
Ensure your server is properly configured to allow necessary traffic:</p>
<pre><code># Allow HTTP and HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Allow TURN ports
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw allow 5349/udp

# Allow Matrix Federation API
sudo ufw allow 8448/tcp

# Allow UDP port range for TURN
sudo ufw allow 49152:49172/udp

# Enable UFW if it's not already enabled
sudo ufw enable

# Verify the rules
sudo ufw status verbose
</code></pre>
</li>
<li><strong>Check for Port Conflicts</strong>:<br />
Before proceeding, check if the necessary ports are already in use:</p>
<pre><code>sudo lsof -i :80
</code>if port is occupied, resolve the conflict before continuing.</pre>
<pre><code>just register-user
</code></pre>
<pre><code>git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git
cd matrix-docker-ansible-deploy</code></pre>
</li>
</ol>
<hr />
<p><strong>Setting Up the Matrix Server</strong></p>
<pre><code>
</code></pre>
<p>With the prerequisites in place, you can proceed with the server setup.</p>
<ol>
<li><strong>Install Ansible Galaxy Dependencies</strong>:<br />
From within the <code>matrix-docker-ansible-deploy</code> directory:</p>
<pre><code>ansible-galaxy install -r requirements.yml
</code></pre>
</li>
<li><strong>Run the Setup Playbook</strong>:<br />
Use <code>just</code> to install all necessary roles and start the server:</p>
<pre><code>just roles
ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start --ask-become-pass
</code></pre>
</li>
<li><strong>Dealing with Service Failures</strong>:<br />
During my setup, I encountered an issue with the <code>matrix-traefik</code> service failing to start due to a port conflict:</p>
<pre><code>systemd[1]: matrix-traefik.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: matrix-traefik.service: Failed with result 'exit-code'.
systemd[1]: matrix-traefik.service: Scheduled restart job, restart counter is at 289.
</code></pre>
<p>The solution was to identify which service was occupying port</p>
<pre><code>just register-user   
</code></pre>
<pre><code>git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git
cd matrix-docker-ansible-deploy
</code></pre>
<p>and either stop it or configure <code>traefik</code> to use a different port.</li>
<li><strong>Configuring Matrix Synapse</strong>:
<ul>
<li>If you need to register users, you can use the <code>just</code> command:
<pre><code>just register-user   
</code></pre>
</li>
<li>To configure Synapse further, such as disabling the ability to join remote rooms:
<pre><code>sudo su - matrix
nano /matrix/synapse/config/homeserver.yaml
</code></pre>
<p>Add or modify the following configuration:</p>
<pre><code>sudo apt update
sudo apt install curl git ansible
</code></pre>
<pre><code>git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git
cd matrix-docker-ansible-deploy
</code></pre>
</li>
<li>After making changes, restart the Synapse service:
<pre><code>sudo apt update
sudo apt install curl git ansible
</code></pre>
<pre><code></code></pre>
</li>
</ul>
</li>
</ol>
<hr />
<pre>https://github.com/etkecc/synapse-admin/?tab=readme-ov-file
</pre>
<p><strong>Final Thoughts and Support</strong></p>
<p>Setting up a Matrix server using Docker and Ansible with <code>matrix-docker-ansible-deploy</code> is a powerful and flexible approach, especially if you plan to manage multiple services or scale your deployment. However, it’s important to be prepared for some potential troubleshooting along the way, especially when it comes to port conflicts and service configurations.</p>
<p>The Matrix community and the maintainers of this playbook offer fantastic support:</p>
<ul>
<li><strong>Matrix Room</strong>: <a href="https://matrix.to/#/#matrix-docker-ansible-deploy:devture.com">#matrix-docker-ansible-deploy:devture.com</a></li>
<li><strong>IRC Channel</strong>: <code>#matrix-docker-ansible-deploy</code> on the Libera Chat IRC network (<a href="irc://irc.libera.chat:&lt;br /&gt;&lt;pre wp-pre-tag-6&gt;&lt;/pre&gt; &lt;p&gt;,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;just roles ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start --ask-become-pass &lt;/code&gt;&lt;/pre&gt; &lt;pre wp-pre-tag-6&gt;&lt;/pre&gt; &lt;p&gt;,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;just roles ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start --ask-become-pass &lt;/code&gt;&lt;/pre&gt; &lt;pre wp-pre-tag-9&gt;&lt;/pre&gt; &lt;p&gt;,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;sudo su - matrix nano /matrix/synapse/config/homeserver.yaml &lt;/code&gt;&lt;/pre&gt; &lt;pre wp-pre-tag-7&gt;&lt;/pre&gt; &lt;p&gt;,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;systemd[1]: matrix-traefik.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: matrix-traefik.service: Failed with result 'exit-code'. systemd[1]: matrix-traefik.service: Scheduled restart job, restart counter is at 289. &lt;/code&gt;&lt;/pre&gt; &lt;p&gt;">irc.libera.chat:</a>
<pre></pre>
<pre><code>just roles
ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start --ask-become-pass
</code></pre>
<pre><code>sudo su - matrix
nano /matrix/synapse/config/homeserver.yaml
</code></pre>
<pre><code>systemd[1]: matrix-traefik.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: matrix-traefik.service: Failed with result 'exit-code'.
systemd[1]: matrix-traefik.service: Scheduled restart job, restart counter is at 289.
</code></pre>
</li>
<li><strong>GitHub Issues</strong>: <a href="https://github.com/spantaleev/matrix-docker-ansible-deploy/issues">spantaleev/matrix-docker-ansible-deploy/issues</a></li>
</ul>
<p>The post <a href="https://urage.net/blog/setting-up-a-matrix-server-using-ansible-and-docker/">Setting up a Matrix Server using Ansible and Docker</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Taskitty Progress Report (07/2024)</title>
		<link>https://urage.net/blog/taskitty-progress-report-07-2024/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Sun, 04 Aug 2024 14:33:59 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1768</guid>

					<description><![CDATA[<p>The post <a href="https://urage.net/blog/taskitty-progress-report-07-2024/">Taskitty Progress Report (07/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2>We&#8217;re excited to share the latest updates on Taskitty ٩(⸝⸝ᵕᴗᵕ⸝⸝)و*̣̩⋆̩*</h2>
<p>In this progress report, we&#8217;ll outline some short tasks, Visuals and Features, as well as very short tasks, Nice Little things and medium tasks.</p>
<p>Below, you&#8217;ll find a summary of what we&#8217;ve achieved so far and an overview of the exciting features and improvements we&#8217;re planning for upcoming versions.</p>
<h3>Upcoming Version</h3>
<pre>✔ keyboard up in comments window text field to edit last comment (done in: 0.10.0)
✔ add due date for task (done in: 0.10.0)
✔ milestones (done in: 0.10.0)
✔ proper sort order in versions (done in: 0.10.0)
✔ improve the look of the footer panel (done in: 0.10.0)
✔ donedatetime for tasks (done in: 0.10.0)
✔ remove selected task when pressing delete key (done in: 0.10.0)
✔ escape key to clear search filter (done in: 0.10.0)
✔ set donedatetime of task when marking task as done
✔ implement reflections
✔ Mind Map prototype for brainstorm feature
✔ do a HasTag(long id) and HasTag(string tagName) function in board
✔ needs lib for newtonsoft json for unity 2021 and earlier
✔ "start date" field for card table
✔ basic work on members
✔ "remove"-button in checklist to avoid accidental removing task instead
✔ marking hidden tasks as done or doing will now unhide them
✔ \+ in checklist for done todos
✔ on pressing escape twice after editting task, unselect the task
✔ finish the white/dark text colors
✔ "blog" aka notes with optional daily notes</pre>
<h3>v0.10.0</h3>
<pre>✔ add an "upcoming version" entry to the version popups (done in: 0.9.0)
✔ somehow we have 2 tasks marked as done without a done in version
✔ when adding a task in the done list, no done in version is set
✔ Add a "released in version" field to create a detailed and accurate changelog</pre>
<h3>New Tasks</h3>
<ul>
<li>option to pop out footer panel</li>
<li>rly think about do popup task to edit like trello as 2nd option</li>
<li>repeating/recurring/periodic tasks</li>
<li>User Roles and Permissions</li>
<li>taskitty discord bot to taskitty</li>
<li>copy tasks from one taskitty to another from different projects</li>
<li>texture paint</li>
<li>more checks when version is 1.0 and changing to 2.0 (there are errors in the taskitty gui) and also null/empty versions</li>
<li>somehow done_datetime of some tasks are being set to now in some cases</li>
<li>save current db as lastuseddb in editorprefs and load it on taskitty start.</li>
<li>close popped out task panel when getting deleted / or hide content and show undo button</li>
<li>filters and text search should be board specific</li>
<li>we need a UR_TkProgressReport class to save progress reports</li>
<li>also show board dropdown in add new task. we need it when we add a task from outside taskitty</li>
<li>members for boards</li>
<li>prob need to make another unitypackage that installs newtonsoft json dll only if &lt; unity 2022</li>
<li>repeatingEndDateTime column in card table for repeating tasks. we prob dont need time, since it&#8217;s handled by repeating interval and ends with the last on that day. do it anyways to be safe for the future</li>
<li>show warning (as message somewhere, not popup) on taskitty startup, when there are tasks without an added in version</li>
<li>on task add, warn if there is no or no valid version set</li>
<li>if version change detected, and previous version is empty, ask user to set added version to the current version for tasks with empty addedversion</li>
<li>ask user to unmark task as doing when moving doing task out of doing list</li>
<li>multiple members modify database</li>
<li>tag cover</li>
<li>covers visually disappear after leaving playmode</li>
<li>change current member name</li>
<li>Copy Board feature</li>
<li>profile picture</li>
<li>when clicking new task from taskitty editor toolbar, we could think about a hacky workaround to prevent showing taskitty when it&#8217;s not opened yet: set a flag and dont show anything in taskitty. instead show our add task panel in the editor window.</li>
<li>screenshotter for in editor and in game screenshots</li>
</ul>
<p>This Progress Report was generated with Taskitty ≽^•⩊•^≼ &#8211; Learn More: <a href="https://urage.net/taskitty">https://urage.net/taskitty</a></p>

		</div>
	</div>
</div></div></div></div>
</div><p>The post <a href="https://urage.net/blog/taskitty-progress-report-07-2024/">Taskitty Progress Report (07/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Taskitty Progress Report (06/2024)</title>
		<link>https://urage.net/blog/taskitty-progress-report-06-2024/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Sun, 30 Jun 2024 23:21:47 +0000</pubDate>
				<category><![CDATA[Assets]]></category>
		<category><![CDATA[progress report]]></category>
		<category><![CDATA[taskitty]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1627</guid>

					<description><![CDATA[<p>We&#8217;re excited to share the latest updates on Taskitty ٩(⸝⸝ᵕᴗᵕ⸝⸝)و*̣̩⋆̩* In this progress report, we&#8217;ll outline some Features, short tasks and Bugs, [&#8230;]</p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-06-2024/">Taskitty Progress Report (06/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>We&#8217;re excited to share the latest updates on Taskitty ٩(⸝⸝ᵕᴗᵕ⸝⸝)و*̣̩⋆̩*</p>
<p>In this progress report, we&#8217;ll outline some Features, short tasks and Bugs, as well as unspecified yets.</p>
<p>Below, you&#8217;ll find a summary of what we&#8217;ve achieved so far.</p>
<p>*v0.9.0*<br />
**short tasks**<br />
✔ create project for taskitty free version aka Taskitty Lite (done in: 0.8.0)<br />
**Other**<br />
✔ refactoring scripts to work in playmode for Taskitty PlayMode asset</p>
<p>*v0.8.0*<br />
**Bugs**<br />
✔ when comment window is open, we cannot click anything in a card (done in: 0.7.1)<br />
**unspecified yets**<br />
✔ Dont drag lists when hover over scrollbar (done in: 0.7.1)<br />
**Other**<br />
✔ reworked the logo<br />
✔ rebrand to URage<br />
✔ can still drag lists when not actually hovered over them</p>
<p>This Progress Report was generated by Taskitty ≽^•⩊•^≼ &#8211; Learn More: https://urage.net/taskitty</p>
<p>&nbsp;</p>
<h3>Problem with the Unity Version and Added/Done Tasks</h3>
<p>th eproblem: when the user doesn&#8217;t update the version, and he marks tasks as done or adding tasks after he made a release, those tasks will go to the older version. we need to tell the user to update the version first. but how detect the release?</p>
<ul>
<li>to work around this, the user would need to increase the version by guessing the new version diretly after a release. *dirty*</li>
<li>also we would need to  handle v1.0/0.1</li>
</ul>
<p>this was kinda a ride as well. so let&#8217;s summarize:</p>
<blockquote>
<ul>
<li>We wanted to use <a href="https://docs.unity3d.com/ScriptReference/BuildPipeline.html">BuildPipeline</a>.isBuildingPlayer but it somehow just doesn&#8217;t returns true. also it&#8217;s not available in Unity 2019</li>
<li>then we found out about <a href="https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Build.IPreprocessBuildWithReport.html">IPreprocessBuildWithReport</a>.OnPreprocessBuild and <a href="https://docs.unity3d.com/2019.4/Documentation/ScriptReference/Build.IPostprocessBuildWithReport.html">IPostprocessBuildWithReport</a>.OnPostprocessBuild but those also aren&#8217;t available in Unity 2019</li>
<li>FileSystemWatcher so we&#8217;re independant of any unity versions and we would anyone need another approach for a later tool outside of Unity.</li>
<li>Finally we realized, we could just store the checksum in EditorPrefs and compare it with current one</li>
<li>But that results in Unity popping up a loading popup we could not get rid of yet. Tried Coroutines. Maybe a Thread?</li>
</ul>
</blockquote>
<p><strong>update done in versions on version change with a 2nd info &#8220;finalDoneInVersion&#8221; so we dont double update them?</strong><br />
Do we need a &#8220;released in version&#8221; info for our tasks?</p>
<p>added in = came up in<br />
done in = fixed in x available in y</p>
<p>(what if there will never be a build but an  export that counts as release cause it&#8217;s an asset or other project instead of a game?)<br />
add ability to change added in and done in verrsion if everything fails</p>
<p>we are doing a progress report for v0.1.1 for tasks thas have been done in v0.1.0 <strong>after we made a release</strong></p>
<p>so if we mark a task as done or add a new task <strong>after a release</strong>, ask the user if that task is for the new version. note that we can&#8217;t expect the user to guess the new version, since there could be a bug fix first and then a feature implementation in the same version. so first it would be 0.1.1 but then we realize it&#8217;s 0.2.0. so we use the flag.</p>
<p>also maybe show a notification popup to inform when version has increased and maybe ask if the release happened, to close pending done tasks)</p>
<p>and suggest new version in config panel. would be cool to have an option in a tag to set major.minor.patch  automatically. &#8220;feature&#8221; is minor. &#8220;bug&#8221; is patch. &#8220;milestone&#8221; is &#8220;major&#8221;</p>
<p>what if we make 2 releases without mark done or add tasks in a version? we would need the filewatcher again.</p>
<h3>szenario 1:</h3>
<p>0.1.0:</p>
<p>-create a cube</p>
<p>&#8211;<strong>initial release (this is prob important)</strong></p>
<p>-scale the cube (added in 0.1.0)</p>
<p>-mark done (done in 0.1.0)</p>
[increase to 0.1.1]
<p>0.1.1</p>
<p>-release 0.1.1</p>
<p>&nbsp;</p>
<h3>szenario 2:</h3>
<p>0.1.0:</p>
<p>-create a cube</p>
<p>&#8211;<strong>initial release (this is prob important)</strong></p>
<p>-scale the cube (added in 0.1.0)</p>
[increase to 0.1.1]
<p>0.1.1</p>
<p>-mark done (done in 0.1.1)</p>
<p>-release 0.1.1</p>
<p>&nbsp;</p>
<h3>szenario 3:</h3>
<p>0.1.0:</p>
<p>-create a cube</p>
<p>&#8211;<strong>initial release (this is prob important)</strong></p>
[increase to 0.1.1]
<p>0.1.1</p>
<p>-scale the cube (added in 0.1.1)</p>
<p>-mark done (done in 0.1.1)</p>
<p>-release 0.1.1</p>
<p>&nbsp;</p>
<h3>szenario 4a:</h3>
<p>0.1.0:</p>
<p>-create a cube</p>
<p>&#8211;<strong>initial release (this is prob important)</strong></p>
<p>-scale the cube (added in 0.1.0)</p>
<p>-mark done (done in 0.1.0)</p>
<p>-release 0.1.1</p>
[increase to 0.1.1]
<p>0.1.1:</p>
<p>&nbsp;</p>
<h3>szenario 4b:</h3>
<p>0.1.0:</p>
<p>-create a cube</p>
<p>&#8211;<strong>initial release (this is prob important)</strong></p>
<p>-scale the cube (added in 0.1.0)</p>
<p>-release 0.1.1</p>
<p>-mark done (done in 0.1.0)</p>
[increase to 0.1.1]
<p>0.1.1:</p>
<h2>Taskitty PlayMode</h2>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script>&#8220;&gt;</p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script></p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script></p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-06-2024/">Taskitty Progress Report (06/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Taskitty Progress Report (05/2024)</title>
		<link>https://urage.net/blog/taskitty-progress-report-05-2024/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Wed, 05 Jun 2024 22:28:31 +0000</pubDate>
				<category><![CDATA[Assets]]></category>
		<category><![CDATA[progress report]]></category>
		<category><![CDATA[taskitty]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1478</guid>

					<description><![CDATA[<p>We&#8217;re excited to share the latest updates on Taskitty 🥳 In this report, we&#8217;ll outline some Bugs. and very short tasks. Below, [&#8230;]</p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-05-2024/">Taskitty Progress Report (05/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>We&#8217;re excited to share the latest updates on Taskitty <span id="copy-emoji" class="efont">🥳</span></p>
<p><span id="copy-emoji" class="efont"></span>In this report, we&#8217;ll outline some Bugs. and very short tasks.</p>
<p>Below, you&#8217;ll find a summary of what we&#8217;ve achieved so far and an overview of the exciting features we&#8217;re planning for future versions.</p>
<p><em>v0.7.1</em></p>
<p><strong>Very Short Tasks<br />
</strong>✔ when comments window is open, update the messages when another task is selected(0.7.1)<br />
✔ store datetime as NUMERIC(0.7.1)</p>
<p><strong>Bugs<br />
</strong>✔ exception on script compilation when comments window is open(0.7.1)<br />
✔ we need to change select card to mouse up or find another way to fix selecting wrong card cause of hidden quick actions(0.7.1)</p>
<p><strong>Other<br />
</strong></p>
<p>✔ horizontal mousescrollbutton scroll buggy cause of invisible tasks<br />
✔ stop capturing when there is a hotcontrol! https://www.reddit.com/r/Unity3D/comments/cmer0h/unity_protip_dont_forget_to_not_be_capturing_when/<br />
✔ Should not be capturing when there is a hotcontrol<br />
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&amp;)<br />
✔ adding tasks in &#8220;Normal Priority&#8221; are somehow marked as on hold. and adding tasks in &#8220;On Hold&#8221; arent marked as on hold anymore<br />
✔ Unity finally supports emojis with Unity 6<br />
✔ fixed &#8220;use semantic versioning&#8221; no longer working</p>
<h3><strong>Advanced Search Options</strong></h3>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-1479 size-full" src="https://urage.net/wp-content/uploads/2024/05/taskitty_search.png" alt="" width="542" height="170" srcset="https://urage.net/wp-content/uploads/2024/05/taskitty_search.png 542w, https://urage.net/wp-content/uploads/2024/05/taskitty_search-300x94.png 300w, https://urage.net/wp-content/uploads/2024/05/taskitty_search-200x63.png 200w, https://urage.net/wp-content/uploads/2024/05/taskitty_search-400x125.png 400w, https://urage.net/wp-content/uploads/2024/05/taskitty_search-540x170.png 540w" sizes="(max-width: 542px) 100vw, 542px" /></p>
<h3><strong>Version Filter</strong></h3>
<p>The Version Filter allows you to show only Tasks that were added in and/or* Tasks that were done in a specific version.</p>
<p><img decoding="async" class="alignnone wp-image-1480 size-thumbnail" src="https://urage.net/wp-content/uploads/2024/05/taskitty_version_filter-150x103.png" alt="" width="150" height="103" /></p>
<p>* The and/or option will specify the behaviour of the version filter.</p>
<ul>
<li>and: Tasks will only be displayed, if it was added <strong>and</strong> done in the specified versions</li>
<li>or: Tasks will show <strong>either</strong> if they were added <strong>or</strong> done in the specified version</li>
</ul>
<h3><strong>Add a new Task directly from a GameObject, ..<br />
</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1501 size-thumbnail" src="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty2-150x150.png" alt="" width="150" height="150" srcset="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty2-150x150.png 150w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty2-66x66.png 66w" sizes="auto, (max-width: 150px) 100vw, 150px" /></p>
<h3><strong>.. Component, ..<br />
</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1495 size-full" src="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty.png" alt="" width="428" height="344" srcset="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty.png 428w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty-300x241.png 300w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty-200x161.png 200w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty-400x321.png 400w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty-177x142.png 177w" sizes="auto, (max-width: 428px) 100vw, 428px" /></p>
<h3><strong>.. Asset or Folder</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1500 size-full" src="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty3.png" alt="" width="540" height="285" srcset="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty3.png 540w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty3-300x158.png 300w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty3-200x106.png 200w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty3-400x211.png 400w" sizes="auto, (max-width: 540px) 100vw, 540px" /></p>
<p>This will then create a Task based on the selected object</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1497 size-full" src="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty_new.png" alt="" width="207" height="149" srcset="https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty_new.png 207w, https://urage.net/wp-content/uploads/2024/05/taskitty_addToTaskitty_new-200x144.png 200w" sizes="auto, (max-width: 207px) 100vw, 207px" /></p>
<h3><strong>Quick Checklists</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1555 size-thumbnail" src="https://urage.net/wp-content/uploads/2024/05/showoff1-150x150.png" alt="" width="150" height="150" srcset="https://urage.net/wp-content/uploads/2024/05/showoff1-150x150.png 150w, https://urage.net/wp-content/uploads/2024/05/showoff1-66x66.png 66w" sizes="auto, (max-width: 150px) 100vw, 150px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1554 size-full" src="https://urage.net/wp-content/uploads/2024/05/showoff2.png" alt="" width="202" height="211" srcset="https://urage.net/wp-content/uploads/2024/05/showoff2.png 202w, https://urage.net/wp-content/uploads/2024/05/showoff2-200x209.png 200w" sizes="auto, (max-width: 202px) 100vw, 202px" /></p>
<h3><strong>Horizontal Scroll by Drag</strong></h3>
<p>In addition to drag horizontally with the mouse wheel, you can now also scroll sidewards by just dragging the mouse</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1571 size-full" src="https://urage.net/wp-content/uploads/2024/06/scroll_by_drag.gif" alt="" width="967" height="728" /></p>
<h3><strong>Editor ToolBar</strong></h3>
<p>The Taskitty Editor ToolBar allows you to quickly add a task from within your Scene view.<br />
That way, you will not get interrupted from your current activity and prevent you from forgetting your task while starting up taskitty.</p>
<p><em><strong>Note:</strong> Unity introduced Editor ToolBars with Unity 2020, so unfortunately this feature will not be available when using Unity 2019 and older.<br />
We already played around with Scene GUI Elements before working on the Editor ToolBar, so we could create a fallback for this. We mark this as On Hold.<br />
</em></p>
<p><strong><img loading="lazy" decoding="async" class="alignnone wp-image-1576 size-full" src="https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar.png" alt="" width="688" height="489" srcset="https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar.png 688w, https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar-300x214.png 300w, https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar-200x142.png 200w, https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar-400x284.png 400w, https://urage.net/wp-content/uploads/2024/06/taskitty_editortoolbar-600x426.png 600w" sizes="auto, (max-width: 688px) 100vw, 688px" /></strong></p>
<h3><strong>Undo / Redo</strong></h3>
<p>This is work in progress and pretty hacky so far. Unity wants us to register changes of a specific GameObject. In our case this would be the Taskitty Editor Window (or a some kind of helper object) and we would need to mark the class as Serializable as well as the fields we are interested in. Since we are working with an sqlite database to store our data, we need to control our undo/redo actions manually.<br />
Long story short, if you are wondering why there are weird numbers in the Undo/Redo menu, this is part of the hacky approach. The number is the internal Task ID, which we need to do our undo/redo actions.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1577 size-full" src="https://urage.net/wp-content/uploads/2024/06/taskitty_undo-redo.png" alt="" width="315" height="142" srcset="https://urage.net/wp-content/uploads/2024/06/taskitty_undo-redo.png 315w, https://urage.net/wp-content/uploads/2024/06/taskitty_undo-redo-300x135.png 300w, https://urage.net/wp-content/uploads/2024/06/taskitty_undo-redo-200x90.png 200w" sizes="auto, (max-width: 315px) 100vw, 315px" /></p>
<h3>Proper Reordering of Lists and Tasks</h3>
<p>A lot of work was needed to properly reposition our Lists and Tasks. This is one of our core features that needed some more time in learning the habbits of Unity Editor GUIs when it comes to dynamic elements.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1586 size-full" src="https://urage.net/wp-content/uploads/2024/06/reorder_things.gif" alt="" width="967" height="728" /></p>
<p>Optimized also for large Tasks</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1599 size-full" src="https://urage.net/wp-content/uploads/2024/06/reorder_large_things.gif" alt="" width="1602" height="1031" /></p>
<h3>Toggle Taskitty Settings Panel</h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1601 size-full" src="https://urage.net/wp-content/uploads/2024/06/toggle_taskitty_settings.gif" alt="" width="962" height="643" /></p>
<hr />
<h2 style="text-align: center;"><strong><br />
🚧 Todo&#8217;s for further versions 🚧</strong></h2>
<p><strong>short tasks<br />
</strong>• when adding a task from context menu, reference the gameobject/asset in form of an attachment<br />
• ctrl+z / ctrl+y in text<br />
• events not working when windows are popped out (enter key)<br />
• fully implement board settings and remove hardcoded lists and add possibility for lists of other boards<br />
• rework the boardsettings. they aren&#8217;t fully board specific yet<br />
• when copying a task and then adding tags, they will be added to both tasks. but not stored in db<br />
• show quick action card buttons on mouse over<br />
• also we cannot double click a card to mark as doing anymore when we hover over (not editting) name or description because we prob select card on mouse down<br />
• suggest to add multiple tasks when copy paste text that has newlines<br />
• make toolbar and preview the version and add an extra button to set it<br />
• check task color if custom color is set (maybe tag), then set foreground light/dark as<br />
• save window and taskitty settings to json file/editor prefs (editor prefs for things like current board)<br />
• change mouse cursor on drag<br />
• per default search set the &#8220;in&#8221; search filter to search in currentboard only<br />
• setup wizard<br />
• transparent background images range 0,100<br />
• popup sort order &#8220;new to old&#8221; &#8220;old to new&#8221;<br />
• transparent overlay<br />
• dropdown to specify position in list when adding new task. and a checkbox &#8220;also change button position&#8221;<br />
• save last selected list from dropdown. when unchecking the checkbox &#8220;This is already done&#8221;, switch back to the last list<br />
• make 2 checkboxes out of &#8220;growing lists&#8221;, one for grow width and the other for grow height<br />
• when changing drop down from &#8220;Done&#8221; list to sth else, uncheck the checkbox &#8220;This is already done&#8221;<br />
• when hitting escape directly after adding new task/list discard it<br />
• double click lists to collapse/expand<br />
• show warning when about to remove a list and there are hidden cards (if show hidden tasks is not enabled)<br />
• escape key to clear search filter<br />
• only grow specific lists and tasks<br />
• tags with close button to remove it from the tas<br />
• select multiple cards with control key<br />
• automatic next version suggestion based on done tags (bug +0.0.1 feature +0.1.0)</p>
<p><strong>Bugs<br />
</strong>• events not working when windows are popped out (enter key)<br />
• when copying a task and then adding tags, they will be added to both tasks. but not stored in db<br />
• all tags suddenly disappeared for some reason. happened once. not sure why and couldn&#8217;t reproduce yet. restarting taskitty fixed it</p>
<p><strong>Features<br />
</strong>• ctrl+z / ctrl+y in text<br />
• custom font sizes<br />
• custom icon sizes<br />
• Undo/Redo for everything<br />
• draggable lists and tasks<br />
• dropdown to specify position in list when adding new task. and a checkbox &#8220;also change button position&#8221;<br />
• collapse/expand lists by double clicking list header<br />
• let user specify what to show per default in a task<br />
• implement &#8220;spoiler&#8221; option to mark further todos (or specific tasks) as a spoiler (for discord)<br />
• when hitting escape directly after adding new task/list discard it<br />
• add screenshots/textures and preview links<br />
• &#8220;random&#8221; done task notifications. maybe also based on informations like added in version (and added date &#8211; yes, we need an added date for tasks) then show sth like &#8220;wow finally&#8221; if it was added long time ago<br />
• &#8220;search &#8230;&#8221; in &#8220;list options&#8221; to specifically search in this list<br />
• numbered checklists<br />
• checklists in comments<br />
• double click lists to collapse/expand<br />
• let user specify which &#8220;quick task actions&#8221; to show in the task<br />
• escape key to clear search filter<br />
• only grow specific lists and tasks<br />
• Group Cards<br />
• tags with close button to remove it from the tas<br />
• show an overview over all the cards<br />
• select multiple cards with control key<br />
• discord login to retrieve servers and webhooks<br />
• automatic next version suggestion based on done tags (bug +0.0.1 feature +0.1.0)<br />
• multiple members modify database</p>
<p><strong>nasty bugs<br />
</strong>• task management scroll horizontal is bugged because we are detecting mouse over still with wrong y position?</p>
<p><strong>Other<br />
</strong>• make progress report for all boards and add toggle buttons to specify which boards to consider<br />
• remove tags<br />
• adding tasks in &#8220;Normal Priority&#8221; are somehow marked as on hold. and adding tasks in &#8220;On Hold&#8221; arent marked as on hold anymore<br />
• range in version filter<br />
• &lt;u&gt; tag not displaying underlined in Unity 2021<br />
• show a reddish background or a notification that needs to be confirmed when current database is pointing to /Assets/UnityRage and a warning when it&#8217;s in /Assets (git merge conflicts)<br />
• Should not be capturing when there is a hotcontrol<br />
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&amp;)<br />
• option to open cards like trello when clicking name or description<br />
• monitor version change outside and inside of taskitty and show notification &#8220;version has changed, do sth&#8230;&#8221;<br />
• when a task just has been added mark it as such somehow. this is useful when filters are set to display that task at all cost. otherwise we wouldn&#8217;t siee it probably<br />
• progress report based on<br />
• add due date for task<br />
• on pressing escape twice after editting task, unselect the task<br />
• copy tags (name+description, &#8230;) and checklists to paste them in other boards (and even other databases)<br />
• card color in card options popup and other windows like comments<br />
• add &#8220;automatically hide lists when all tasks in it are hidden&#8221; to combined task/list show/hide filter popup<br />
• &#8220;blog&#8221; with optional daily notes<br />
• localization<br />
• &#8220;more options&#8221; item in task and list options<br />
• when a card is marked as doing and then the task is moved to another list, ask to unmark it as doing when the new list is not the doing list<br />
• Option to save last progress report version info for the next report. so we will know where to begin with and what we&#8217;ve already reported<br />
• we need to get the list and background color and add them somehow to the card color to check if that color combined is dark/light<br />
• what if we drag a list on the y position, resize the list? when holding control?<br />
• when doing konami code, play a meow sound when we click things (pitch and slower/faster)<br />
• display changelogs as seperate board/database?<br />
• card options menu item &#8220;copy card name/description/name+description&#8221;<br />
• make a copy of referenced card cover to make the copy read/writable to store the blob then we can prob delete the copy again<br />
• optimize loading card covers into ram by only saving byte array and display covers if task or list is not hidden<br />
• detect scrollbar heights<br />
• think about toggle header position (to footer) or if we want to make a seperate footer?<br />
• ability to specify a doing duration range for some tags<br />
• progress counter in lists for open/done cards (if there are done cards in the list)<br />
• change gui somehow the more tasks we have (something fun when reaching X tasks and so on) also Konami Code</p>
<p>• banner animation on mouse over?</p>
<p>• think about if we need a dictionary (probably yes) to store our lists and task<br />
• consider using active and in build scene names as name suggestions for Boards</p>
<p>• helpbox style on hover color<br />
• scene gui options<br />
• explanations for &#8220;Event List Widths&#8221; and other options<br />
• explanation for discord webhook and show screenshots<br />
• problem with v0.4.0 and a.4.0 and so on<br />
• zoom in/out in board<br />
• toggle between temp show only 1 list and everything<br />
• option to move card to the top or bottom of the list<br />
• cannot double click to mark doing when there is no doing list set<br />
• taskitty history (log every action)<br />
• add links to Project Settings and Build Settings (pack WindowLayoutManager with Taskitty?)<br />
• improve mouse over cards by only allow over card of currently hovered list?</p>
<p>This Progress Report was generated by Taskitty ≽^•⩊•^≼ &#8211; Learn More: <a href="https://urage.net/taskitty">https://urage.net/taskitty</a></p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script>&#8220;&gt;</p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script></p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-05-2024/">Taskitty Progress Report (05/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Taskitty Progress Report (04/2024)</title>
		<link>https://urage.net/blog/taskitty-progress-report-04-2024/</link>
		
		<dc:creator><![CDATA[rainer]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 17:33:34 +0000</pubDate>
				<category><![CDATA[Assets]]></category>
		<category><![CDATA[progress report]]></category>
		<category><![CDATA[taskitty]]></category>
		<guid isPermaLink="false">https://urage.net/?p=1447</guid>

					<description><![CDATA[<p>Feature complete. do the todos and fix the last bugs. also improve the gui &#160; Final Logo? (spoiler: no) Banner Image Increased [&#8230;]</p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-04-2024/">Taskitty Progress Report (04/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Feature complete. do the todos and fix the last bugs. also improve the gui</p>
<p>&nbsp;</p>
<ul>
<li>Final Logo? <em>(spoiler: no)</em></li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1459 size-fusion-400" src="https://urage.net/wp-content/uploads/2024/05/logo-full-400x211.png" alt="" width="400" height="211" srcset="https://urage.net/wp-content/uploads/2024/05/logo-full-400x211.png 400w, https://urage.net/wp-content/uploads/2024/05/logo-full-300x158.png 300w, https://urage.net/wp-content/uploads/2024/05/logo-full-200x105.png 200w, https://urage.net/wp-content/uploads/2024/05/logo-full.png 512w" sizes="auto, (max-width: 400px) 100vw, 400px" /></p>
<ul>
<li>Banner Image</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1460 size-fusion-200" src="https://urage.net/wp-content/uploads/2024/05/banner-200x36.png" alt="" width="200" height="36" srcset="https://urage.net/wp-content/uploads/2024/05/banner-200x36.png 200w, https://urage.net/wp-content/uploads/2024/05/banner.png 256w" sizes="auto, (max-width: 200px) 100vw, 200px" /></p>
<ul>
<li>Increased default font size in tasks a bit for better readability</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1462 size-fusion-1200" src="https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-1200x662.png" alt="" width="1200" height="662" srcset="https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-1200x662.png 1200w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-300x166.png 300w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-1024x565.png 1024w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-768x424.png 768w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-200x110.png 200w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-400x221.png 400w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-600x331.png 600w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty-800x441.png 800w, https://urage.net/wp-content/uploads/2024/05/2024-05-04-16_45_19-Taskitty-v0.6.0-Taskitty.png 1323w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></p>
<ul>
<li>Moving Lists and Task around now finally works &#8211; still buggy of course, but works!</li>
</ul>
<div style="width: 1170px;" class="wp-video"><video class="wp-video-shortcode" id="video-1447-3" width="1170" height="658" preload="metadata" controls="controls"><source type="video/mp4" src="https://urage.net/wp-content/uploads/2024/05/move_around.mp4?_=3" /><a href="https://urage.net/wp-content/uploads/2024/05/move_around.mp4">https://urage.net/wp-content/uploads/2024/05/move_around.mp4</a></video></div>
<ul>
<li>Documentation Database</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1456 size-large" src="https://urage.net/wp-content/uploads/2024/05/documentation_db-1024x437.png" alt="" width="1024" height="437" srcset="https://urage.net/wp-content/uploads/2024/05/documentation_db-1024x437.png 1024w, https://urage.net/wp-content/uploads/2024/05/documentation_db-300x128.png 300w, https://urage.net/wp-content/uploads/2024/05/documentation_db-768x328.png 768w, https://urage.net/wp-content/uploads/2024/05/documentation_db-1536x656.png 1536w, https://urage.net/wp-content/uploads/2024/05/documentation_db-200x85.png 200w, https://urage.net/wp-content/uploads/2024/05/documentation_db-400x171.png 400w, https://urage.net/wp-content/uploads/2024/05/documentation_db-600x256.png 600w, https://urage.net/wp-content/uploads/2024/05/documentation_db-800x342.png 800w, https://urage.net/wp-content/uploads/2024/05/documentation_db-1200x512.png 1200w, https://urage.net/wp-content/uploads/2024/05/documentation_db-940x400.png 940w, https://urage.net/wp-content/uploads/2024/05/documentation_db.png 1546w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<ul>
<li>Custom Background Color and Image</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1464 size-fusion-800" src="https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-800x589.png" alt="" width="800" height="589" srcset="https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-800x589.png 800w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-300x221.png 300w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-1024x754.png 1024w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-768x565.png 768w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-200x147.png 200w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-400x294.png 400w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty-600x442.png 600w, https://urage.net/wp-content/uploads/2024/05/2024-05-05-02_31_39-Taskitty-v0.6.0-Taskitty.png 1125w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script></p>
<p><script src="moz-extension://b6404013-150d-4b48-837a-cca3edbdb1c7/js/app.js" type="text/javascript"></script></p>
<p>The post <a href="https://urage.net/blog/taskitty-progress-report-04-2024/">Taskitty Progress Report (04/2024)</a> appeared first on <a href="https://urage.net">URage</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://urage.net/wp-content/uploads/2024/05/move_around.mp4" length="20061517" type="video/mp4" />

			</item>
	</channel>
</rss>
