Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate genome browser visualizations using pyGenomeTracks or IGV batch scripting for publication figures. Use when creating publication figures of genomic regions with multiple data tracks.
.claude/skills/bio-data-visualization-genome-browser-tracks/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-22 | ✓→✗ | ▼ Worse | 142% | 0% |
| case-21 | ✓→✓ | = Same ✓ | 170% | 0% |
<!--
#
#
-->
ini[x-axis] where = top [bigwig_coverage] file = sample.bw title = Coverage height = 3 color = #4DBBD5 min_value = 0 max_value = auto [spacer] height = 0.5 [peaks] file = peaks.bed title = Peaks color = #E64B35 height = 1 display = collapsed [genes] file = genes.gtf title = Genes height = 5 fontsize = 10 style = UCSC color = navy
bash# Generate track plot pyGenomeTracks --tracks tracks.ini --region chr1:1000000-2000000 \ --outFileName region.png --dpi 300 # Multiple regions for region in chr1:1000000-2000000 chr2:5000000-6000000; do pyGenomeTracks --tracks tracks.ini --region $region \ --outFileName "${region//:/_}.png" --dpi 300 done
pythonimport pygenometracks.tracks as pygtk from pygenometracks import plotTracks # Programmatic track configuration tracks = ''' [x-axis] where = top [bigwig] file = coverage.bw title = ChIP-seq height = 4 color = #4DBBD5 [bed] file = peaks.narrowPeak title = Peaks height = 1 color = #E64B35 ''' # Write config and plot with open('tracks.ini', 'w') as f: f.write(tracks) # Using command line via subprocess import subprocess subprocess.run([ 'pyGenomeTracks', '--tracks', 'tracks.ini', '--region', 'chr1:1000000-2000000', '--outFileName', 'output.png', '--dpi', '300' ])
ini[bigwig] file = signal.bw title = Coverage height = 4 color = #4DBBD5 min_value = 0 max_value = auto number_of_bins = 700 nans_to_zeros = true summary_method = mean # overlay_previous = share-y # For overlaying multiple tracks
ini[bed] file = peaks.narrowPeak title = Peaks height = 2 color = #E64B35 display = collapsed # or stacked, interleaved, triangles labels = false # file_type = bed # auto-detected usually [bed_links] file = interactions.bedpe title = Loops height = 3 file_type = links links_type = arcs color = purple line_width = 1
ini[genes] file = genes.gtf title = Genes height = 6 fontsize = 10 style = UCSC # or flybase prefered_name = gene_name merge_transcripts = false color = navy border_color = black # arrow_interval = 2 # Arrow frequency [genes_bed12] file = genes.bed12 title = Transcripts height = 5 fontsize = 8 color = darkblue
ini[hic_matrix] file = matrix.cool title = Hi-C height = 10 depth = 1000000 min_value = 0 max_value = 100 transform = log1p colormap = RdYlBu_r show_masked_bins = false
bash# Create batch script cat > igv_batch.txt << 'EOF' new genome hg38 load sample1.bam load peaks.bed snapshotDirectory ./snapshots goto chr1:1000000-2000000 snapshot region1.png goto chr2:5000000-6000000 snapshot region2.png exit EOF # Run IGV in batch mode igv -b igv_batch.txt
bash# Common IGV batch commands new # New session genome hg38 # Load genome load file.bam # Load track snapshotDirectory ./out # Set output dir goto chr1:1000000-2000000 # Navigate to region sort base # Sort reads collapse # Collapse tracks expand # Expand tracks squish # Squish display maxPanelHeight 500 # Set panel height snapshot file.png # Take screenshot exit # Exit IGV
rlibrary(Gviz) library(GenomicRanges) # Axis track axTrack <- GenomeAxisTrack() # Gene track from TxDb library(TxDb.Hsapiens.UCSC.hg38.knownGene) txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene grTrack <- GeneRegionTrack(txdb, chromosome = 'chr1', name = 'Genes') # Data track from BigWig dTrack <- DataTrack(range = 'coverage.bw', type = 'h', chromosome = 'chr1', name = 'Coverage', col = '#4DBBD5') # Annotation track from BED aTrack <- AnnotationTrack(range = 'peaks.bed', name = 'Peaks', chromosome = 'chr1', fill = '#E64B35') # Plot tracks plotTracks(list(axTrack, dTrack, aTrack, grTrack), from = 1000000, to = 2000000, chromosome = 'chr1') # Save to PDF pdf('tracks.pdf', width = 10, height = 6) plotTracks(list(axTrack, dTrack, aTrack, grTrack), from = 1000000, to = 2000000) dev.off()
ini# tracks.ini for multiple samples [x-axis] [sample1_bw] file = sample1.bw title = Sample 1 height = 3 color = #4DBBD5 min_value = 0 max_value = 100 [sample2_bw] file = sample2.bw title = Sample 2 height = 3 color = #E64B35 min_value = 0 max_value = 100 overlay_previous = share-y [spacer] height = 0.3 [sample1_peaks] file = sample1_peaks.bed title = S1 Peaks height = 1 color = #4DBBD5 [sample2_peaks] file = sample2_peaks.bed title = S2 Peaks height = 1 color = #E64B35
bash# High resolution PNG pyGenomeTracks --tracks tracks.ini --region chr1:1-1000000 \ --outFileName figure.png --dpi 300 --width 40 # PDF for vector graphics pyGenomeTracks --tracks tracks.ini --region chr1:1-1000000 \ --outFileName figure.pdf --width 40 # SVG for editing pyGenomeTracks --tracks tracks.ini --region chr1:1-1000000 \ --outFileName figure.svg --width 40
<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-21 | pass→pass | 5,604 | 5,425 | -3% | 1 | 1 | 0% | 1,167 | 3,153 | +170% | 0 | 0 | — |
case-22 | pass→fail | 7,006 | 6,552 | -6% | 1 | 1 | 0% | 1,393 | 3,370 | +142% | 0 | 0 | — |
case-23 | pass→pass | 17,750 | 10,954 | -38% | 1 | 1 | 0% | 2,275 | 4,186 | +84% | 0 | 0 | — |
case-01 | pass→pass | 7,817 | 5,047 | -35% | 1 | 1 | 0% | 1,684 | 3,219 | +91% | 0 | 0 | — |
case-02 | fail→fail | 16,929 | 10,146 | -40% | 1 | 1 | 0% | 3,544 | 4,090 | +15% | 0 | 0 | — |
case-03 | pass→pass | 12,001 | 7,385 | -38% | 1 | 1 | 0% | 2,544 | 3,628 | +43% | 0 | 0 | — |
case-04 | pass→pass | 6,527 | 4,742 | -27% | 1 | 1 | 0% | 1,311 | 3,013 | +130% | 0 | 0 | — |
case-05 | pass→pass | 7,726 | 4,414 | -43% | 1 | 1 | 0% | 1,533 | 2,835 | +85% | 0 | 0 | — |
case-06 | pass→pass | 10,441 | 5,223 | -50% | 1 | 1 | 0% | 1,914 | 3,046 | +59% | 0 | 0 | — |
case-07 | pass→pass | 5,933 | 3,068 | -48% | 1 | 1 | 0% | 1,125 | 2,713 | +141% | 0 | 0 | — |
case-08 | pass→pass | 8,218 | 6,573 | -20% | 1 | 1 | 0% | 1,550 | 3,371 | +117% | 0 | 0 | — |
case-09 | pass→pass | 4,899 | 2,577 | -47% | 1 | 1 | 0% | 830 | 2,509 | +202% | 0 | 0 | — |
case-10 | fail→pass | 8,049 | 5,707 | -29% | 1 | 1 | 0% | 1,505 | 3,250 | +116% | 0 | 0 | — |
case-11 | pass→pass | 6,558 | 4,504 | -31% | 1 | 1 | 0% | 1,339 | 3,091 | +131% | 0 | 0 | — |
case-12 | pass→pass | 5,839 | 5,193 | -11% | 1 | 1 | 0% | 1,103 | 2,989 | +171% | 0 | 0 | — |
case-13 | pass→pass | 6,390 | 3,066 | -52% | 1 | 1 | 0% | 1,271 | 2,655 | +109% | 0 | 0 | — |
case-14 | fail→pass | 10,140 | 4,655 | -54% | 1 | 1 | 0% | 1,727 | 2,941 | +70% | 0 | 0 | — |
case-15 | fail→pass | 7,960 | 6,228 | -22% | 1 | 1 | 0% | 1,511 | 3,211 | +113% | 0 | 0 | — |
case-16 | pass→pass | 4,273 | 2,475 | -42% | 1 | 1 | 0% | 891 | 2,594 | +191% | 0 | 0 | — |
case-17 | pass→pass | 4,689 | 2,159 | -54% | 1 | 1 | 0% | 662 | 2,449 | +270% | 0 | 0 | — |
case-18 | pass→pass | 7,838 | 3,418 | -56% | 1 | 1 | 0% | 1,375 | 2,730 | +99% | 0 | 0 | — |
case-19 | pass→pass | 10,669 | 3,476 | -67% | 1 | 1 | 0% | 1,015 | 2,648 | +161% | 0 | 0 | — |
case-20 | pass→pass | 9,600 | 5,957 | -38% | 1 | 1 | 0% | 1,894 | 3,256 | +72% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/26/2026 | +5% |
Other measured skills in the registry, with their headline benchmark lift.