If you could not download the Nemotron-3.5-ASR-Streaming-0.6B speech-to-text model because your network blocks the model registry, the fix is to fetch the model package on a network that is allowed, verify its integrity, and point your runtime at the local folder instead of the registry. The registry is only a delivery channel. Once the weights and config files are on disk, the runtime does not need to reach out, provided you set the local-path environment variables and disable automatic remote lookups before the first load.

This guide explains why registry fetches fail behind filtered networks, how resolution and caching actually work, how to stage and validate a downloaded package, and where the approach still breaks. It also covers the streaming-specific details that trip people up when they move a model offline.

How Registry Resolution Fails Behind a Filter

Most model runtimes resolve a short identifier like a model name into bytes through a small number of steps, and any one of them can be blocked. The runtime first maps the identifier to a registry endpoint, usually a hostname that resolves to a content-delivery or API server. It then requests a manifest that lists files and checksums, followed by the actual weight shards and configuration. A filtered network can break this chain at DNS, at TLS inspection, at the HTTP request itself, or at the final content host, and the error you see often reflects the last step rather than the first.

The distinction matters because the failure mode changes the remedy. A DNS block returns a name-resolution error immediately, while a transparent proxy that allows the connection but stalls the transfer produces a timeout after a long hang. A TLS-inspecting middlebox can complete the handshake yet reject the certificate chain, which surfaces as a certificate error rather than a network error. Knowing which stage failed tells you whether a local package will actually solve the problem or whether something deeper, like a read-only cache directory, is also involved.

There is a second layer that people miss. Even when the registry is reachable, runtimes cache downloaded artifacts in a local directory keyed by a hash of the manifest. If that cache is on a network share that blocks large writes, or if the process lacks write permission, the download appears to fail even though connectivity is fine. The runtime is trying to persist the model and cannot. So "could not download" is sometimes really "could not cache," and a pre-staged package placed directly in the expected location sidesteps both.

The practical upshot is that offline installation works by replicating what the registry would have delivered, in the layout the runtime expects, and then telling the runtime to trust that local copy. You are not hacking around the system. You are performing the same resolution step by hand, on a network that permits it, and handing the result to a runtime configured to accept it.

Quantified Context: Sizes, Transfers, and Time

Numbers help you plan the transfer and sanity-check what you received. A 0.6B-parameter speech model stores its weights in a compact numeric format, so the dominant cost is the weight file plus tokenizer and configuration assets. In 16-bit precision, 0.6 billion parameters occupy roughly 1.2 GB before any overhead, and quantized or streaming-optimized variants land in a similar order of magnitude. The exact figure depends on the published precision, so treat any single number as approximate and confirm against the manifest.

Transfer time scales linearly with size and inversely with throughput. On a 10 Mbps link, 1.2 GB takes about 16 minutes at perfect efficiency and closer to 20 with overhead. On a 100 Mbps link it drops to roughly 2 minutes. A throttled or shaping proxy can turn a two-minute transfer into an hour, which is exactly the scenario where downloading elsewhere and carrying the package in becomes rational rather than merely convenient.

Storage and memory are separate budgets. The on-disk package and the in-memory working set are not the same, and a streaming ASR model keeps audio buffers and decoder state live during inference. Plan disk for the package plus the runtime's cache copy if it duplicates on load, and plan RAM or VRAM for the resident weights plus streaming buffers. A model that fits comfortably on disk can still fail to load if the runtime tries to hold two copies during verification.

Integrity is the number that protects you. The manifest lists a checksum per file, and a single flipped bit in a weight shard can produce silent accuracy loss rather than a clean error. Always record the checksums on the source network and verify them after transfer. If the publisher provides a signed manifest, verify the signature too, because a corrupted or tampered package that loads without complaint is worse than one that refuses to load.

Edge Cases That Break Offline Installs

Offline installation fails in ways that online installation hides, and most of them are environmental rather than model-specific. The runtime still tries to phone home for a revision check, a tokenizer, or a feature-extractor config even when the weights are local. If outbound calls are blocked at the firewall rather than the registry, the load hangs on a lookup you did not expect. Disabling telemetry and remote revision checks before the first load prevents this.

Path handling is a frequent culprit. Some runtimes accept a local directory, others require a specific folder structure with the manifest at the root, and a few expect the identifier to be rewritten to an absolute path. A relative path that works in one working directory fails in another, so always use absolute paths in service definitions and container mounts. Symlinks that resolve on the source machine can dangle after transfer if you copied the link rather than the target.

Version skew between the runtime and the package causes quiet failures. A package published for one runtime release may use a config schema the installed runtime does not recognize, and the error can be cryptic. Pin the runtime version to the one the package documents, or confirm the config schema matches. This is the single most common reason a correctly transferred package still will not load.

Container and permission issues round out the list. A read-only filesystem prevents the runtime from writing its cache and lock files, so the load fails despite readable weights. A non-root user without traverse permission on a parent directory sees the files as missing. And a security scanner that quarantines the large binary mid-copy leaves a truncated file that fails checksum verification, which is the good outcome.

Red flag: the package loads without any checksum verification step and the runtime reports success on a suspiciously small file. Red flag: outbound calls to the registry still appear in logs during load, meaning remote resolution is not fully disabled. Red flag: a relative model path in a service unit that passes interactively but fails under the service manager. Red flag: runtime and package versions that were never tested together, with no config-schema confirmation. Red flag: a cache directory on a network share or read-only mount that silently rejects writes.

Misconceptions About "Downloading" a Model

The first misconception is that the registry is the model. It is not. The registry is an index and a delivery mechanism, and the model is the set of files it points to. Once those files exist locally with matching checksums, the registry's availability is irrelevant. People treat a registry outage as a model outage, which leads them to wait for a service that the local package makes unnecessary.

The second is that a local package must be a special "offline build." In most cases it is the identical artifact the registry serves, just fetched elsewhere. There is no separate offline variant to hunt for. If a publisher does ship a distinct archive, its contents are the same weights and configs in a packaging wrapper, so the runtime behavior after extraction is equivalent. This is why verifying checksums against the publisher's manifest is meaningful: it proves you have the same bytes, not a lookalike.

The third is that caching and downloading are the same operation. They are not. Downloading moves bytes from the registry to your machine. Caching decides where those bytes persist and how they are keyed. You can pre-populate a cache without any download, which is precisely what offline staging does. Confusing the two leads people to clear caches and retry downloads when the real fix is to place files where the cache expects them.

The fourth, and the most expensive, is the assumption that a model that loads is a model that works. Loading confirms the files parse and the runtime accepts the schema. It does not confirm the weights are intact or the streaming decoder behaves correctly. A professional caveat worth internalizing: silent corruption survives loading, so integrity checks and a short inference smoke test are not optional steps. Run a known audio clip through the model and compare the transcript against an expected result before trusting it in production.

Comparison: Delivery and Installation Routes

Different situations call for different routes, and the tradeoffs are real. The table below compares the common ways to get a model onto a restricted machine.

Route Works when registry blocked Integrity verification Typical friction Best for
Direct registry download No Automatic via manifest None if network permits Unrestricted networks
Download elsewhere, copy package Yes Manual checksum check Transfer logistics, path setup Filtered corporate networks
Air-gapped media transfer Yes Manual, plus signature if available Slow, physical handling Isolated or classified environments
Internal mirror or proxy Yes, if mirror allowed Depends on mirror sync Mirror maintenance, staleness Teams with several restricted hosts
Container image with baked model Yes Image digest verification Large images, rebuild cost Repeatable deployments
Cache pre-population Yes Manual checksum check Must match cache layout Single host, frequent reloads

The copy-package and cache-pre-population routes are the most direct answers to a blocked registry. The internal mirror is the better long-term answer for a team, because it centralizes integrity checks and avoids repeating manual transfers. Container baking is strongest when you need identical environments across many machines, at the cost of image size. Air-gap transfer is the fallback when nothing else is permitted, and it demands the most discipline around checksums.

Practical Steps to Stage and Load the Package

Start on a network that can reach the registry. Resolve the exact package the runtime expects, note the file list and checksums from the manifest, and record the runtime version it targets. Download the files, then compute checksums locally and confirm they match before you copy anything. If a signed manifest exists, verify the signature at this stage, because this is the last point where you can trust the source cleanly.

Transfer the package to the restricted machine using whatever channel policy allows, then re-verify checksums on arrival. Copying over USB, SCP, or an internal share can corrupt large files, and re-verification catches it before the runtime does. Place the package in an absolute path the runtime can read, with traverse permission for the service user, and confirm the parent directories are readable end to end.

Configure the runtime for local resolution. Set the model path to the absolute directory, disable remote revision checks, and point the cache directory at a writable local path if the runtime copies on load. If the runtime expects a specific folder layout, arrange the files to match rather than fighting the loader. Check logs on the first load for any outbound request, and treat its presence as a configuration error to fix.

Validate with a smoke test before production. Load the model, run a short known audio sample, and compare the transcript to an expected output you captured on the source network. A mismatch points to corruption or a version mismatch, not to the network. Only after the smoke test passes should you wire the model into a service, and when you do, keep the absolute path and version pins in the service definition so a restart cannot silently change what loads.

Use thresholds to decide when this matters. If a single reliable transfer is under a few minutes on an allowed network and the target machine can reach nothing, staging by hand is worth it. If you have more than a handful of restricted hosts, invest in an internal mirror instead of repeating manual transfers. If the package changes frequently, pin versions and treat each update as a fresh checksum-verified transfer rather than an assumption that the old process still holds.

Limitations and What This Cannot Fix

Offline staging solves delivery, not compatibility. If the runtime cannot parse the package's config schema, a local copy will not help, and you need the matching runtime version. If the model requires a license token that the runtime checks against the registry at load, working around a blocked registry may violate the terms, so confirm the license permits offline use before you stage anything. Integrity checks prove the bytes match the publisher's manifest, nothing more, and they cannot detect a package that was compromised at the source.

Streaming adds constraints that static models do not have. The runtime keeps decoder state and audio buffers live, so a machine that loads the model may still fail under real-time load if memory or compute is insufficient. Latency also depends on chunk size and hardware, and no offline package changes those. Verify streaming behavior with a sustained test, not a single short clip, because the failure mode under load is dropped audio or growing latency rather than a clean error.

Finally, keep the package and manifest archived with the checksums you verified. Regenerating a trusted local copy later is far easier when you can prove what you had. If a future transfer produces different checksums, treat that as a signal to investigate the source, not as a reason to skip verification. The whole point of the offline route is that you control the bytes, and control only holds if you keep the record that proves it.