Skip to content

Uploading to Usenet

Note

This page covers the process of manually uploading a file to Usenet. You do not need to know this to use the juicenet. This is essentially what it does. This is what I initially wrote when I was first figuring this stuff out and seeing how there's no good guide out there, I've decided to keep it for anyone else trying to figure this stuff out. It's not a good guide because it was never meant to be one, but it's better than nothing.

Prerequisites

Linux

  1. Install nvm

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
    
  2. Install node

    nvm install node
    
  3. Install yencode

    npm install yencode
    
  4. Install Nyuu

    npm install -g nyuu --production --unsafe-perm
    
  5. Install ParPar

    npm install -g @animetosho/parpar
    

Windows

On Windows, you simply need to grab the following two pre-built binaries:

  1. Nyuu
  2. ParPar

Getting Started

Let's assume I want to upload this file:

Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv

Parpar

Parpar is a tool to create PAR2 files. PAR2 files are very important because they are parity data that can be used to recover missing or damaged files. This can be done easily with the following command:

parpar -s700k --slice-size-multiple=700K --max-input-slices=4000 -r1n*1.2 -R \
--filepath-format basename \
-o "path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv"

Note

You must generate PAR2 files for every single file you upload. Uploading stuff to Usenet without PAR2 files is as good as not uploading them.

Apart from being parity data, PAR2 files also store the path of the file. This then allows downloaders like SABnzbd to reconstruct folder structures. This is really handy for stuff like BDMVs where the folder structure is important.

In this case, I'm uploading a singular episode where paths don't matter so I'll use --filepath-format basename which discards all the paths and only keeps the filename.

This means that:

path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv
will become
Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv

--filepath-format has more options and might change depending on your use case. You can read more about it here. You can read what the other options do here but they'll mostly remain constant.

After this, you will now have .par2 files like this:

.
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol00+01.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol01+02.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol03+04.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol07+08.par2
└── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol15+16.par2

Nyuu

Now that we have the our video file with it's corresponding .par2 files, we have to upload it. The upload command will look something like this:

nyuu -C "/path/to/config.json" \
-o "path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.nzb" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.par2" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol00+01.par2" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol01+02.par2" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol03+04.par2" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol07+08.par2" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol15+16.par2"

As you can see, you have to explicitly pass each file and it's .par2 files to Nyuu and tell it to make a single output nzb with -o "path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.nzb". Not really ideal, considering doing this for every episode would be tedious.

Alternatively, you can move the files into a folder as such:

Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group/
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol00+01.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol01+02.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol03+04.par2
├── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol07+08.par2
└── Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.mkv.vol15+16.par2

And, then uploading gets much simpler because you can just pass the folder to Nyuu and it'll make a single nzb out of them:

nyuu -C "/path/to/config.json" \
-o "path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group.nzb" \
"path/to/Show.S01E01.BluRay.1080p.FLAC2.0.H.265-Group/"

Either of the above commands will start uploading our video and .par2 files and output the .nzb file once it's done but neither of them are ideal. Explicitly specifying each file is tedious and moving files into a folder might break other stuff (e.g. if you're seeding the file in a torrent client).

During the above upload process, your files are uploaded in tiny chunks (~700KiB) called raw articles. Think of it as pieces in torrents. Now some of these raw articles can fail to upload for various reasons. Nyuu will put all the failed raw articles in the folder defined by --dump-failed-posts. You should check this folder and repost the failed raw articles later which can be done with the command below:

nyuu -C "/path/to/config.json" \
--log-time --skip-errors all \
--delete-raw-posts \
--input-raw-posts "/path/to/your/dump/as/defined/in/config"