BitWrk 0.6.0 "Mars" - distributed rendering for Blender

Hi fellow Blender friends,

I would like to announce the release of BitWrk 0.6.0 “Mars”.

Homepage | Download | GitHub

Along with the usual bug fixes, it contains the following new features:

Easier setup | video
The BitWrk client is now started from the Blender add-on. Use of command-line no longer necessary. Makes installation a breeze.

Network rendering | video
Connect a bunch of computers in your network and create your own render farm, without using the BitWrk service at all. You can get additional power from BitWrk at any time. This feature has been requested here and even works on still images.

Local rendering | video
It is now very easy to start a local rendering slave from the Blender add-on.

About BitWrk
BitWrk is a Bitcoin-fueled peer-to-peer service for distributed Blender rendering. What makes it different from its contenders is that anybody can contribute with their own hardware, even earning some (micro-)Bitcoins.

As a Free and Open Source project BitWrk is my attempt to contribute something useful to the Blender community.

Join the community
Why not give BitWrk a try? There are servers providing BitWrk rendering for Blender 2.78 for FREE, i.e. they’re bidding for BTC 0. Absolutely no registration needed. The following video shows how to get started.

Have fun and tell me what you think!
Jonas

Nice work indiyo!

I’ll definitiley try it the next days, when I find some time.
I’ve still one question: How are you handling the transaction fees? I mean, this kind of concept is really cool and I would love to use it. But I think with using microtransactions it only works if the transaction fees are low. But with Bitcoin hitting it’s blocksize limit that’s not really the case right now…

I guess you are already aware of it, but I thought I’ll just mention it here. There is also the “Golem” project which is trying to build a decentralized super computer. And their first use case is also Blender rendering… (https://golem.network/alpha.html) They are going to use their own currency which I guess may work better for microtransactions, but I’m not sure. Maybe you guys could even work together…

Hi Johannes,

Regarding Bitcoin’s fees, you have to pay a transaction fee when you deposit money on your BitWrk account. Once the money is there, all transactions happen inside BitWrk. Only when you withdraw it, another Bitcoin transaction fee has to be paid.

Very small transactions like 1 mBTC would suffer from a lot of relative overhead because of fees. On the other hand, it is up to you to decide how much you transfer at a time, so I don’t see this a too urgent. In the long run, there could be off-chain solutions like Lightning Network.

I am aware of Golem, and have been in contact with the lead developer. It is a very ambitious project and I wish them much success. Maybe BitWrk is a little less complicated, technology-wise.

If you’re interested in the Bitcoin side of things, Bitcoin Magazine recently published an article about BitWrk.

Thanks for clarification indyjo!

So basically all the transactions happening in Bitwrk are off-chain which makes microtransactions possible. That’s really cool and nice to hear. Correct me if I’m wrong. So this also means, that my fundings are stored in a wallet that belongs to Bitwrk, not one where only I have the private keys. Then after using it and render something you have the right to withdraw a corresponding amount of this wallet. Ok, now I understand why you were saying not to put any large amounts of money into your account… Actually a pretty nice concept! Will definitively try it! Thanks!
I really like what you are creating here! Keep up the good work!

Can BitWrk be configured to utilize GPU rendering?

Exactly!

Also true. But not so critical: Unlike Bitcoin exchanges, you don’t deposit huge amounts of money. In comparison, it’s only pocket money, making the risk much smaller and reducing the attractiveness of attacking the BitWrk service a little.

This happens per tile (in BitWrk speak: per trade), with a fee of currently 3%. So if you buy a tile for 100 uBTC (micro-BTC), you spend an additional 3 uBTC on the service. I would like to make this rate flexible later on, so that new participants and badly-behaving ones pay a little more in order to reward good behavior.

It’s a little early to think about scaling. There is not much of an economy going on yet.

What BitWrk needs right now is a handful of regular users, providing feedback, suggestions, and even bug reports. I am totally ok with sponsoring a couple of servers rendering for free.

I’d also be very happy to support the artists among you, and even happier to read something like “Rendered with BitWrk” in the picture descriptions. That would generate some reputation in the community.

Ok, I just gave it a qick try and wanted to test the local network render capabilities. I’m under win10 using Blender 2.78.

Some things I noticed:

  • when I switch from “cycles” to “BitWrk Render” the whole rendertab is very unresponsive and sluggish! For example when I scroll or push a button. But it’s only the render tab. If I switch to another one scrolling works fine. A bit annoying.
  • when I locate the “bitwrk-client.exe” and then hit “Start BitWrk client” it does NOT work. The button gets greyed out for a second or so while the “Stop BitWrk client” gets clickable. But then it immediately switches again and no client gets started. Manually starting the client with doubleclick on the .exe works…
  • opening the client userinterface works and rendering with your free servers also worked fine. BUT:
  • “Start worker” does NOT work either! It’s the same as hitting “Start BitWrk client” before. It switches immediately back without starting it…

So basically I’m not able to get the local network rendering to work.

There are two additional questions I have:

  1. How can I choose between gpu and cpu? Or do I have to set this up in the “Cycles” render tab? Who is going to decide if gpu or cpu is rendering? Is it the one that hits F12 or do I have to configure each worker separately?

  2. How can I specify which Blender to use with the btwrk-client.exe? I want to use a custom blender build. Maybe it automatically uses the one from which I’m starting it. But as I can’t start it out of blender I wonder if there’s a way to point bitwrk to a special blender build.

Hi Wegg & Johannes,

Rendering on GPU should work by selecting the correct compute device in the settings (don’t forget to save) and then activating it in the render tab while “Cycles Render” is selected. The next time you start a worker it should adhere to these settings. I admit it could be more convenient, though.

The sluggishness issue is new to me. What I do know is that the UI only updates when the mouse cursor moves. But this seems to be something else. Will investigate.

Not being able to start the client and worker might be Windows-related. I will investigate that, too.

When bitwrk-client.exe doesn’t start, it usually prints an error message to the console. For example, there can’t be two instances running at the same time. You might have a look at it.

Johannes, you were right that if you click on “Start Worker” (a worker listens for jobs and then starts Blender with those), it will always run on the Blender build that you started it with. You might try running “blender-slave.py” from the command line, if you’re comfortable with that. See QUICKSTART. There is no control over the Blender build used by other sellers, though. Is your use case Filmic Blender, by any chance?

That was some very valuable feedback, thanks! It’s great seeing people actually use BitWrk!

I was able to reproduce the issue you reported about starting bitwrk-client.exe.

There is now a new version 0.6.1. Get it here: https://github.com/indyjo/bitwrk/releases/tag/v0.6.1

I am very grateful for any feedback I get from you guys, this is incredibly valuable. Shows that Blender really has a fantastic community.

Please keep it coming… and make the BitWrk servers glow! :spin:

Silly question: where is the executable in the Linux version?

Also, it seems like there should be just a zip or a tar but not both…

I’m sorry, I don’t provide executables for Linux. Those are the sources (the ones generated by GitHub don’t include the git submodules, so I provide my own source downloads).

My experiences with binary compatibility between different distributions has taught me that package management should be the way to go.

BitWrk is really easy to compile though: https://github.com/indyjo/bitwrk/blob/master/COMPILING.md

I compiled and got this running on Arch and on Ubuntu, so a few things about Bitwrk on Linux:

  • Users can’t be expected to compile this for every machine they deploy.

  • Once compiled, there are two ways to launch- bin/bitwrk-client and through the addon “start bitwrk client” but through the terminal “allow other computers as workers” is not an available option. If started from terminal, start and stop client are unavailable in blender.

  • It is unclear whether when I start bitwrk-client from terminal it is available as a worker for other computers or not. Do I need to load up blender and start worker? If so, then starting from terminal only works for local (same computer, not LAN) anyway and start from terminal is superfluous.

  • When I open up the web interface, there is a message in a big blue bar that covers up the Activities/Workers/Mandates text that denotes what the columns mean. This message is not immediately obvious that it can be closed so that information is unavailable.

  • In Blender, I started the Bitwrk client with Start worker with the client host ip set to my other machine. It shows up as available on my other machine but when I try to render it always asks for a different port.

Error performing sell (delaying next sell by 20s): Worker finished with  error: Post http://127.0.0.1:37647/work: dial tcp 127.0.0.1:37647:  getsockopt: connection refused

If I change to that port, the requested port will change too.

  • It is unclear whether “concurrent tiles” means total for all machines or local threads.

  • When I enable Bitwrk Render, all materials in material view (3d viewport) go black.

  • It seems when I go into the web interface, I can manually publish the job to be done by a computer somewhere else at 0BTC, but I have to do this for each tile instead of a block of them.

This is where I get stuck. At it’s current state, Bitwrk renders require way more manual intervention and are slower than local rendering as a result.

Hi XenWildman, thanks for the great feedback! Let me take the time to answer this:

Of course, you’re right. I just hoped someone could step in and provide binary packages for these distros. Your wish was definitely noted. I’ll see what I can do.

Once compiled, there are two ways to launch- bin/bitwrk-client and through the addon “start bitwrk client” but through the terminal “allow other computers as workers” is not an available option. If started from terminal, start and stop client are unavailable in blender.

Allow other computers as workers is actually identical to passing -intiface “” to bitwrk-client (the two double quotes are important). The behavior you’re observing wrt buttons greyed out is actually intentional, because there is already a client running on the selected port.

It is unclear whether when I start bitwrk-client from terminal it is available as a worker for other computers or not. Do I need to load up blender and start worker? If so, then starting from terminal only works for local (same computer, not LAN) anyway and start from terminal is superfluous.

bitwrk-client acts as a hub for workers. They connect to a bitwrk client and wait for jobs. Starting a worker can be done easily from Blender. It will then use the running Blender and connect to the bitwrk client configured in the settings panel (usually on localhost:8081, but can be somewhere on LAN, too).

You can start a worker on the command line, too. See below.

When I open up the web interface, there is a message in a big blue bar that covers up the Activities/Workers/Mandates text that denotes what the columns mean. This message is not immediately obvious that it can be closed so that information is unavailable.

Thanks for telling me this!

In Blender, I started the Bitwrk client with Start worker with the client host ip set to my other machine. It shows up as available on my other machine but when I try to render it always asks for a different port.

Error performing sell (delaying next sell by 20s): Worker finished with  error: Post http://127.0.0.1:37647/work: dial tcp 127.0.0.1:37647:  getsockopt: connection refused

If I change to that port, the requested port will change too.

Ok, I looked into this and had a little facepalm moment. You found a bug that prevents LAN rendering from working correctly. Shame on me! :eek:

As a workaround, you might start a worker on the command line:

> python3 ./blender-slave.py --blender /usr/bin/blender --bitwrk-host 192.168.1.1 --bitwrk-port 8081 --listen-port 8765 --listen-iface 192.168.1.2

I assumed 192.168.1.1 as the LAN address of the computer running bitwrk-client and 192.168.1.2 as the IP of the worker computer (as reported by ifconfig). Port 8765 was arbitrarily chosen.

Thanks for reporting this!

It is unclear whether “concurrent tiles” means total for all machines or local threads.

It defines how many tiles Blender dispatches to the BitWrk client at once. Playing around with this a little can be beneficial at the moment.

When I enable Bitwrk Render, all materials in material view (3d viewport) go black.

Ok, noted.

It seems when I go into the web interface, I can manually publish the job to be done by a computer somewhere else at 0BTC, but I have to do this for each tile instead of a block of them.

This is where I get stuck. At it’s current state, Bitwrk renders require way more manual intervention and are slower than local rendering as a result.

If you hit the checkbox next to “Valid for up to … trades”, you can set a price for the next N tiles.

With BitWrk in addition to local rendering, you should be able to get a little more speed out of it.

Thanks again for the valuable report, and I will fix that LAN bug shortly!
Keep on BitWrk’ing :cool:

In utopia, This would be something that I launch on my machine like Transmission (you do refer to bittorrent) that you just launch a small, simple client application that would have settings to point to Blender exec or cycles and it runs headless for the most part. It would automatically search LAN and to the tracker for available work and peers to collaborate with.

I’d run this on my local network with WOL on my machines and when I had work with real deadlines, I’d flip the switch to also look to the outside network for help rendering my project.

I currently have 2x ubuntu machines, 1x Arch and 1x Win10 on my network. The goal would be to use all available resources when I render big projects and to be able to take on larger projects.

Edit: … and thanks for your hard work by the way.

Some more observations:

  • Thanks for fixing the windos issue with starting the .exe file. It now works fine!
  • Interface is still very sluggish on my machine. But when I change the timeout value (line 43 of bitwrkclient.py) from 1 to something like 0.1 it much smoother. With 0.1 you actually hardly notice it anymore. Of course with even lower values it’s even better. But I don’t know what value is reasonable here. I didn’t try it on the network, just on my machine. And on only my local machine everything worked fine even with 0.01…
  • yes, that blue notification is a bit annoying as it covers all the information. I noticed that, too but forgot to mention it earlier.
  • I can confirm the black materials, but it only happens if the material uses nodes

Ok guys, it was a stressful week and it took me a little while to respond. The network render bug will definitely be fixed in a bug fix release. Hope I’ll find the time really soon. The UI sluggishness also seems easy enough to fix, although I’m unsure why I wasn’t able to reproduce it. Something might be interfering there (I’m looking at you, antivirus and vpn software! :wink: )

For now, I collected your suggestions in BitWrk’s GitHub.

And thanks again for the feedback!

It’s really great that both of you got BitWrk to run, even despite the little hick-ups. I hope this is encouragement for more of you to try and put your rendering work on BitWrk. Especially for animations, where distributed rendering can really shine.

Hi fellow Blenderheads,

BitWrk 0.6.2 is out! Download and Release Notes

This bugfix release contains the following enhancements:

  • Local network rendering didn’t work when worker was started in Blender
  • Sluggish Blender UI when the BitWrk settings panel was shown
  • Local workers permanently stopped receiving new tasks on some errors
  • Alert panes don’t cover important parts of the UI anymore

I hope you have fun with this release. The BitWrk servers are providing FREE rendering for you 24/7. Make them glow in the dark!

As always, comments, questions and criticism are very welcome! I would especially like feedback on whether LAN rendering works for you (started from Blender UI, not on the command line).

There is also, for the first time, a Linux binary available for download, built on Debian Linux.

A big THANK YOU to all who help making BitWrk better with each release! :cool:

Render on!
Jonas

Great Idea and thanks for your hard work. Is this still active?

Hi Archimondro! Yes, BitWrk is still active. Workers are currently on Blender 2.78. Also, I noticed there has been a glitch that caused jobs to get stuck in “INQUEUE” state. Should be fixed now.