Skip to content

Commit a0b5c7e

Browse files
committed
add link to SAM3 YouTube stream
1 parent 479da9f commit a0b5c7e

File tree

3 files changed

+136
-98
lines changed

3 files changed

+136
-98
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ This repository offers a growing collection of computer vision tutorials. Learn
7171
## 🚀 model tutorials (55 notebooks)
7272
| **notebook** | **open in colab / kaggle / sagemaker studio lab** | **complementary materials** | **repository / paper** |
7373
|:------------:|:-------------------------------------------------:|:---------------------------:|:----------------------:|
74-
| [Segment Images with SAM3](https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-images-with-segment-anything-3.ipynb) | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-images-with-segment-anything-3.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-images-with-segment-anything-3.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/sam3/) | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/facebookresearch/sam3) |
75-
| [Segment Videos with SAM3](https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-videos-with-segment-anything-3.ipynb) | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-videos-with-segment-anything-3.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-videos-with-segment-anything-3.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/sam3/) | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/facebookresearch/sam3) |
74+
| Segment Images with SAM3 | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-images-with-segment-anything-3.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-images-with-segment-anything-3.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/sam3/) [![YouTube](https://badges.aleen42.com/src/youtube.svg)](https://www.youtube.com/watch?v=G1AEuFwQrWU) | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/facebookresearch/sam3) |
75+
| Segment Videos with SAM3 | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-videos-with-segment-anything-3.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-segment-videos-with-segment-anything-3.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/sam3/) [![YouTube](https://badges.aleen42.com/src/youtube.svg)](https://www.youtube.com/watch?v=G1AEuFwQrWU) | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/facebookresearch/sam3) |
7676
| [Open Vocabulary Object Detection with Qwen3-VL](https://github.com/roboflow-ai/notebooks/blob/main/notebooks/open-vocabulary-object-detection-with-qwen3-vl.ipynb) | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/open-vocabulary-object-detection-with-qwen3-vl.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/open-vocabulary-object-detection-with-qwen3-vl.ipynb) | | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/QwenLM/Qwen3-VL) |
7777
| [Fine-Tune RF-DETR Segmentation Preview on Custom Dataset](https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-rf-detr-on-segmentation-dataset.ipynb) | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-rf-detr-on-segmentation-dataset.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-rf-detr-on-segmentation-dataset.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/rf-detr-segmentation-preview) | [![GitHub](https://badges.aleen42.com/src/github.svg)](https://github.com/roboflow/rf-detr) [![arXiv](https://img.shields.io/badge/arXiv-2511.09554-b31b1b.svg)](https://arxiv.org/abs/2511.09554)|
7878
| [Zero-Shot Object Detection and Segmentation with Google Gemini 2.5](https://github.com/roboflow-ai/notebooks/blob/main/notebooks/zero-shot-object-detection-and-segmentation-with-google-gamini-2-5.ipynb) | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/zero-shot-object-detection-and-segmentation-with-google-gamini-2-5.ipynb) [![Kaggle](https://kaggle.com/static/images/open-in-kaggle.svg)](https://kaggle.com/kernels/welcome?src=https://github.com/roboflow-ai/notebooks/blob/main/notebooks/zero-shot-object-detection-and-segmentation-with-google-gamini-2-5.ipynb) | [![Roboflow](https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg)](https://blog.roboflow.com/gemini-2-5-object-detection-segmentation/) | [![arXiv](https://img.shields.io/badge/arXiv-2507.06261-b31b1b.svg)](https://arxiv.org/abs/2507.06261)|

automation/autogenerate_notebooks_table.py

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class TableEntry:
6363
github_repository_path: Optional[str]
6464
arxiv_index: Optional[str]
6565
should_open_in_sagemaker_labs: bool
66+
should_link_to_notebook: bool
6667
readme_section: READMESection
6768

6869
@classmethod
@@ -72,8 +73,8 @@ def from_csv_line(cls, csv_line: str) -> TableEntry:
7273
for field
7374
in csv_line.split(",")
7475
]
75-
if len(csv_fields) != 8:
76-
raise Exception("Every csv line must contain 8 fields")
76+
if len(csv_fields) != 9:
77+
raise Exception("Every csv line must contain 9 fields")
7778
return TableEntry(
7879
display_name=csv_fields[0],
7980
notebook_name=csv_fields[1],
@@ -82,19 +83,54 @@ def from_csv_line(cls, csv_line: str) -> TableEntry:
8283
github_repository_path=csv_fields[4],
8384
arxiv_index=csv_fields[5],
8485
should_open_in_sagemaker_labs=csv_fields[6] == "True",
85-
readme_section=READMESection.from_value(csv_fields[7])
86+
should_link_to_notebook=csv_fields[7] == "True",
87+
readme_section=READMESection.from_value(csv_fields[8])
8688
)
8789

8890
def format(self) -> str:
89-
notebook_link = NOTEBOOK_LINK_PATTERN.format(self.display_name, NOTEBOOKS_ROOT_PATH, self.notebook_name)
90-
open_in_colab_badge = OPEN_IN_COLAB_BADGE_PATTERN.format(NOTEBOOKS_COLAB_ROOT_PATH, self.notebook_name)
91-
open_in_kaggle_badge = OPEN_IN_KAGGLE_BADGE_PATTERN.format(NOTEBOOKS_ROOT_PATH, self.notebook_name)
92-
open_in_sagemaker_lab_badge = OPEN_IN_SAGEMAKER_LAB_PATTERN.format(self.notebook_name) if self.should_open_in_sagemaker_labs else ""
93-
roboflow_badge = ROBOFLOW_BADGE_PATTERN.format(self.roboflow_blogpost_path) if self.roboflow_blogpost_path else ""
94-
youtube_badge = YOUTUBE_BADGE_PATTERN.format(self.youtube_video_path) if self.youtube_video_path else ""
95-
github_badge = GITHUB_BADGE_PATTERN.format(self.github_repository_path) if self.github_repository_path else ""
96-
arxiv_badge = ARXIV_BADGE_PATTERN.format(self.arxiv_index, self.arxiv_index) if self.arxiv_index else ""
97-
return f"| {notebook_link} | {open_in_colab_badge} {open_in_kaggle_badge} {open_in_sagemaker_lab_badge} | {roboflow_badge} {youtube_badge} | {github_badge} {arxiv_badge}|"
91+
if self.should_link_to_notebook:
92+
notebook_cell = NOTEBOOK_LINK_PATTERN.format(
93+
self.display_name,
94+
NOTEBOOKS_ROOT_PATH,
95+
self.notebook_name
96+
)
97+
else:
98+
notebook_cell = self.display_name
99+
100+
open_in_colab_badge = OPEN_IN_COLAB_BADGE_PATTERN.format(
101+
NOTEBOOKS_COLAB_ROOT_PATH,
102+
self.notebook_name
103+
)
104+
open_in_kaggle_badge = OPEN_IN_KAGGLE_BADGE_PATTERN.format(
105+
NOTEBOOKS_ROOT_PATH,
106+
self.notebook_name
107+
)
108+
open_in_sagemaker_lab_badge = (
109+
OPEN_IN_SAGEMAKER_LAB_PATTERN.format(self.notebook_name)
110+
if self.should_open_in_sagemaker_labs
111+
else ""
112+
)
113+
roboflow_badge = (
114+
ROBOFLOW_BADGE_PATTERN.format(self.roboflow_blogpost_path)
115+
if self.roboflow_blogpost_path
116+
else ""
117+
)
118+
youtube_badge = (
119+
YOUTUBE_BADGE_PATTERN.format(self.youtube_video_path)
120+
if self.youtube_video_path
121+
else ""
122+
)
123+
github_badge = (
124+
GITHUB_BADGE_PATTERN.format(self.github_repository_path)
125+
if self.github_repository_path
126+
else ""
127+
)
128+
arxiv_badge = (
129+
ARXIV_BADGE_PATTERN.format(self.arxiv_index, self.arxiv_index)
130+
if self.arxiv_index
131+
else ""
132+
)
133+
return f"| {notebook_cell} | {open_in_colab_badge} {open_in_kaggle_badge} {open_in_sagemaker_lab_badge} | {roboflow_badge} {youtube_badge} | {github_badge} {arxiv_badge}|"
98134

99135

100136
def read_lines_from_file(path: str) -> List[str]:
@@ -127,8 +163,10 @@ def search_lines_with_token(lines: List[str], token: str) -> List[int]:
127163
def inject_markdown_table_into_readme(readme_lines: List[str], table_lines: List[str]) -> List[str]:
128164
lines_with_token_indexes = search_lines_with_token(lines=readme_lines, token=AUTOGENERATED_NOTEBOOKS_TABLE_TOKEN)
129165
if len(lines_with_token_indexes) != 2:
130-
raise Exception(f"Please inject two {AUTOGENERATED_NOTEBOOKS_TABLE_TOKEN} "
131-
f"tokens to signal start and end of autogenerated table.")
166+
raise Exception(
167+
f"Please inject two {AUTOGENERATED_NOTEBOOKS_TABLE_TOKEN} "
168+
f"tokens to signal start and end of autogenerated table."
169+
)
132170

133171
[table_start_line_index, table_end_line_index] = lines_with_token_indexes
134172
return readme_lines[:table_start_line_index + 1] + table_lines + readme_lines[table_end_line_index:]

0 commit comments

Comments
 (0)