Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
b165ff1
feat: merge data daemon (#378)
muneebneura Feb 7, 2026
8e3a9da
fix: renaming of uploader to importer (#379)
sdas-neuraco Feb 9, 2026
b71ef99
fix: training run names (#380)
sdas-neuraco Feb 9, 2026
67fc41b
fix: auto start daemon (#381)
muneebneura Feb 10, 2026
2380729
docs: update importer docs (#384)
ypang-neuraco Feb 10, 2026
debdf4a
fix: add back pi0 test and fix the patching (#356)
kwangneuraco Feb 10, 2026
3be44e7
feat: improved error for sync-recording (#382)
sdas-neuraco Feb 10, 2026
67a232f
feat: add DROID dataset (#373)
ypang-neuraco Feb 11, 2026
e12549b
feat: check duplicate training name (#386)
sdas-neuraco Feb 11, 2026
bf300be
fix: data type limit in ring buffer chunk headers (#387)
muneebneura Feb 11, 2026
b204052
feat: change discord badge (#389)
kwangneuraco Feb 11, 2026
ee9d251
fix: move dataset cache defaults to core constants (#392)
sdas-neuraco Feb 12, 2026
3b8ea95
fix: rename environment variable doc and update links (#393)
sdas-neuraco Feb 12, 2026
52611d7
fix: impl path retrieving helper functions (#394)
StevenJacobs61 Feb 12, 2026
9c84b35
fix: remove unused importer logging helper and state enum (#395)
sdas-neuraco Feb 12, 2026
c3f7e9c
feat: add local training metadata for local runs (#397)
sdas-neuraco Feb 12, 2026
1d9a947
fix: missing frames in encoding (#388)
favour-neuraco Feb 12, 2026
c2de774
fix: removed data type content mapping (#401)
muneebneura Feb 13, 2026
ead5b49
feat: joint position from ik (#366)
ypang-neuraco Feb 13, 2026
4cbe1cd
fix: Update README to remove main branch note (#402)
sdas-neuraco Feb 16, 2026
41c5b1b
fix: added codec context options to lossless vidoes (#404)
mark-neuracore Feb 16, 2026
327cd06
fix: disk encoder buffer orphaned frames (#403)
mark-neuracore Feb 16, 2026
b1e8984
feat: add model construction documentation
sdas-neuraco Feb 16, 2026
046736e
fix: fixed zmq socket race condition with a single send thread (#406)
mark-neuracore Feb 16, 2026
3b678ba
fix: improve integration test robustness (#411)
ypang-neuraco Feb 17, 2026
0170bd0
feat: add neuracore versions to nc.zip (#409)
sdas-neuraco Feb 17, 2026
55f5f84
feat: add model construction documentation
sdas-neuraco Feb 16, 2026
be770d7
Merge branch 'feat/add-model-docs' of https://github.com/NeuracoreAI/…
sdas-neuraco Feb 17, 2026
aa884db
fix: update
sdas-neuraco Feb 17, 2026
2ee7b35
fix: update
sdas-neuraco Feb 17, 2026
d77f2ea
fix: use shared event loop (#408)
mark-neuracore Feb 17, 2026
e226189
fix: ensured channel states (#398)
StevenJacobs61 Feb 17, 2026
2158cab
fix: updated trace status (#413)
StevenJacobs61 Feb 17, 2026
232aedb
feat: harden CLI launch lifecycle and config parsing (#410)
favour-neuraco Feb 17, 2026
b846563
fix: cli typing error (#414)
sdas-neuraco Feb 17, 2026
53d99f3
fix: created retry uploading status (#415)
StevenJacobs61 Feb 17, 2026
ced7129
fix: update images
sdas-neuraco Feb 17, 2026
ca89d5b
fix: highlighting
sdas-neuraco Feb 17, 2026
e72620b
fix: correct indentation in nyu franka play config (#417)
aditya-neuraco Feb 18, 2026
09217c9
feat: added metadata editing methods (#416)
CougarTasker Feb 18, 2026
b83b9e3
fix: typo
sdas-neuraco Feb 18, 2026
5d640ef
chore: rename example view dataset and code cleaning (#423)
gtiboni-neuraco Feb 19, 2026
13dd73a
feat: add tfds dataformat import and combine with rlds, add bridge v2…
kwangneuraco Feb 19, 2026
9ef31aa
fix: fixed data daemon race condition on concurrent logging api calls…
mark-neuracore Feb 19, 2026
8c1a815
fix: add json and video sources with correct the event loop (#407)
mark-neuracore Feb 19, 2026
a562bbd
fix: update documentation link in README (#424)
gtiboni-neuraco Feb 19, 2026
6af84d7
fix: implemented 2 phase stop recording (#425)
StevenJacobs61 Feb 19, 2026
fb39f26
feat: add rich hander to logging for indented colorful logs (#426)
aditya-neuraco Feb 19, 2026
371c186
feat: add lerobot dataset importer test file (#422)
kwangneuraco Feb 19, 2026
43b507e
feat: add mobile aloha dataset (#427)
ypang-neuraco Feb 20, 2026
4cf3251
fix: removed redundant state (#429)
StevenJacobs61 Feb 20, 2026
5658615
feat: add docs on examples and delete the no_robot (#433)
kwangneuraco Feb 21, 2026
addf9dd
feat: save requirement.txt in the right folder when creating nc (#432)
kwangneuraco Feb 23, 2026
5626aea
fix: broken permissions on forked repository (#436)
CougarTasker Feb 23, 2026
fbd5f08
feat: add pi0 to the integration test (#437)
kwangneuraco Feb 23, 2026
d21f050
chore: comments and import improved in bigym example (#438)
gtiboni-neuraco Feb 24, 2026
ee1189d
feat: switch to bucket logging (#420)
sdas-neuraco Feb 24, 2026
8068701
fix: WIP
sdas-neuraco Feb 24, 2026
483f7b7
fix: WIP
sdas-neuraco Feb 24, 2026
d1feb4d
Merge branch 'develop' into feat/add-model-docs
sdas-neuraco Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/integration-ml.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ jobs:

- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ matrix.environment == 'staging' && 'develop' || github.ref }}
- name: Pull LFS objects
run: git lfs pull

Expand Down
93 changes: 68 additions & 25 deletions .github/workflows/pr-check-source-branch.yaml
Original file line number Diff line number Diff line change
@@ -1,53 +1,96 @@
name: Check PR Source Branch

on:
pull_request:
pull_request_target:
branches:
- main
- develop
types: [opened, synchronize, reopened, edited]

jobs:
check-source-branch:
runs-on: ubuntu-latest
permissions:
pull-requests: write
issues: write
contents: read

steps:
- name: Check if PR is from dev/develop branch
- name: Validate PR source vs target
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const sourceBranch = pr.head.ref;
const targetBranch = pr.base.ref;
const allowedBranches = ['develop'];

const allowedSourceForMain = ['develop'];
const marker = '<!-- pr-source-branch-check -->';

console.log(`PR #${pr.number}: ${sourceBranch} -> ${targetBranch}`);

if (targetBranch === 'main' && !allowedBranches.includes(sourceBranch)) {
const errorMessage = `❌ **Invalid PR Source Branch**
// Helper: create/update a single bot comment instead of spamming
async function upsertComment(body) {
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
per_page: 100,
});

PRs to \`main\` can only come from the \`develop\` branch.
const existing = comments.find(c =>
c.user?.type === 'Bot' &&
typeof c.body === 'string' &&
c.body.includes(marker)
);

**Current PR:**
- Source: \`${sourceBranch}\`
- Target: \`${targetBranch}\`
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body,
});
}
}

**Required workflow:**
1. Merge your feature branch into \`develop\`
2. Once ready for release, create a PR from \`develop\` to \`main\`
// RULE: Only enforce when targeting main
if (targetBranch === 'main' && !allowedSourceForMain.includes(sourceBranch)) {
const errorMessage = `${marker}
❌ **Invalid PR Source Branch forcing to main**

Please close this PR and follow the correct branching workflow.`;
PRs to \`main\` can only come from the \`develop\` branch.

core.setFailed(errorMessage);
**Current PR:**
- Source: \`${sourceBranch}\`
- Target: \`${targetBranch}\`

// Post comment on PR
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: errorMessage
});
} else {
console.log('✅ Source branch is valid');
core.summary.addRaw(`✅ PR source branch \`${sourceBranch}\` is allowed for target \`${targetBranch}\``);
await core.summary.write();
**Required workflow:**
1. Merge your feature branch into \`develop\`
2. Once ready for release, create a PR from \`develop\` to \`main\``;

await upsertComment(errorMessage);
core.setFailed(errorMessage);
return;
}

// If not targeting main, or source is develop, it's valid
const okMessage = `${marker}
✅ **PR source branch is valid**

- Source: \`${sourceBranch}\`
- Target: \`${targetBranch}\``;

// Optional: update comment to green status when user retargets to develop
await upsertComment(okMessage);

core.summary.addRaw(okMessage);
await core.summary.write();
console.log('✅ Source branch is valid');
12 changes: 9 additions & 3 deletions .github/workflows/pr-pre-commit-and-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,15 @@ jobs:
run: |
python -m pip install --no-cache-dir --upgrade pip
pip install --no-cache-dir ".[dev,ml,import]"

- name: Run tests with pytest

- name: Run unit tests (except PI0)
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: |
pytest tests/unit --ignore=tests/unit/ml/algorithms/test_pi0.py

- name: Run PI0 unit tests in isolated pytest process
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: |
pytest tests/unit
pytest tests/unit/ml/algorithms/test_pi0.py
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ default_install_hook_types: [pre-commit]
default_stages: [pre-commit]
default_language_version:
python: python3
node: system
node: "20.18.0" # cspell requires >=20.18; full version needed for nodeenv prebuilt download

repos:
- repo: https://github.com/asottile/pyupgrade
Expand Down Expand Up @@ -44,7 +44,7 @@ repos:
- id: mypy
files: neuracore/
args: ["--disallow-untyped-defs", "--ignore-missing-imports"]
additional_dependencies: [types-requests]
additional_dependencies: [types-requests, types-PyYAML, types-aiofiles]

- repo: https://github.com/streetsidesoftware/cspell-cli
rev: v9.2.0
Expand Down
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
Join our community!
</p>
<p align="center">
<a target="_blank" href="https://discord.gg/DF5m8V6nbD"><img src="https://dcbadge.limes.pink/api/server/DF5m8V6nbD" alt="Discord" /></a>
<a target="_blank" href="https://discord.gg/DF5m8V6nbD"><img src="https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white" alt="Discord" /></a>
</p>

<div align="center">
Expand Down Expand Up @@ -64,10 +64,8 @@ To run our examples:
pip install neuracore[examples]
```

**Note:** The `main` branch is considered a development branch. For production use, we recommend installing from PyPI (as shown above) or using the latest tagged commit.

# 🍰 A Short Taste
Here is a short taste on what neuracore can do, for a detailed walk-through, please refer to the [tutorial](./docs/tutorial.md) and [documentation](#documentation).
Here is a short taste on what neuracore can do, for a detailed walk-through, please refer to the [tutorial](./docs/tutorial.md) and [documentation](#-documentation).
```python
import neuracore as nc # pip install neuracore
import time
Expand Down Expand Up @@ -124,8 +122,9 @@ predictions = policy.predict(timeout=5)
- [Training](./docs/training.md)
- [Command Line Tools](./docs/commandline.md)
- [Dataset Importer](./docs/dataset_importer.md)
- [Environment Variables](./docs/enironment_variable.md)
- [Environment Variables](./docs/environment_variable.md)
- [Contribution Guide](./docs/contribution_guide.md)
- [Data Daemon](./docs/data_daemon.md)

# 💬 Community

Expand Down
14 changes: 13 additions & 1 deletion changelogs/pending-changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,16 @@ Example: "This release adds support for multi-GPU training and improves streamin

## Summary

<!-- Append your summary here -->
### Dataset & Recording Editing:

Adds Recording & Dataset metadata editing methods:
Datasets:
- `dataset.set_name(name)`
- `dataset.set_description(description)`
- `dataset.set_tag(tag)`
- `dataset.add_tag(status)`
Recordings:
- `recording.set_status(status)`
- `recording.set_notes(notes)`

Please see the new examples for how to use these methods
Binary file added docs/assets/cross_embodiment.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/model_input.png
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both Franka and Kuka has 7 Dofs, so using Franka here is not appropriate, using UR-5 is good because it has 6 DoF

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/model_ordering.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading