Convert IPYNB to TEXTILE

Drag and drop files here or click to select.
Max file size 100mb.
Uploading progress:

IPYNB vs TEXTILE Format Comparison

Aspect IPYNB (Source Format) TEXTILE (Target Format)
Format Overview
IPYNB
Jupyter Notebook

IPYNB is an interactive computational document format used by Jupyter. It stores a sequence of cells containing code, markdown text, and outputs in a JSON-based structure. Jupyter Notebooks are the standard tool for data science, machine learning research, and scientific computing workflows.

Interactive Document JSON-Based
TEXTILE
Textile Web Publishing Markup

Textile is a lightweight markup language designed for web publishing. It provides a concise syntax for formatting text that converts to clean HTML. Textile emphasizes readability in both source and rendered forms, making it popular in content management systems like Redmine, Textpattern, and other web platforms.

Web Markup Human Readable
Technical Specifications
Structure: JSON document with cells array
Encoding: UTF-8
Standard: Jupyter Notebook Format v4 (nbformat)
MIME Type: application/x-ipynb+json
Extension: .ipynb
Structure: Plain text with Textile formatting markers
Encoding: UTF-8
Standard: Textile Markup Language specification
MIME Type: text/x-textile
Extension: .textile
Syntax Examples

IPYNB uses JSON cell structure:

{
  "cell_type": "code",
  "source": ["import pandas as pd\n",
             "df = pd.read_csv('data.csv')"],
  "outputs": [{"output_type": "stream",
               "text": ["   col1  col2\n"]}]
}

Textile uses concise formatting markers:

h1. Main Heading

h2. Subheading

This is *bold* and _italic_ text.

# Ordered list item
# Another item

* Unordered item
* Another item

bc. def hello():
    print("Hello, world!")

|_. Name |_. Value |
| Alpha | 0.95 |
| Beta  | 0.87 |
Content Support
  • Python, R, Julia, and other language code cells
  • Markdown text with rich formatting
  • Code execution outputs and results
  • Inline images and visualizations
  • LaTeX mathematical expressions
  • Cell metadata and tags
  • Kernel information and state
  • Headings with h1. through h6. prefix syntax
  • Bold (*text*), italic (_text_), and other emphasis
  • Ordered and unordered lists with # and *
  • Tables with pipe-delimited syntax
  • Block quotes and code blocks (bc.)
  • Hyperlinks and image references
  • CSS class and style attributes inline
Advantages
  • Interactive code execution with immediate output
  • Combines documentation with executable code
  • Rich visualization and plotting support
  • Supports multiple programming languages
  • Industry standard for data science workflows
  • Version control friendly JSON structure
  • Clean, readable source text format
  • Generates well-structured HTML output
  • Inline CSS class and ID support
  • Native integration with Redmine and Textpattern
  • Intuitive formatting syntax
  • Supports footnotes and endnotes
Disadvantages
  • Requires Jupyter environment to execute
  • Large file sizes with embedded outputs
  • Difficult to diff in version control
  • Non-linear execution can cause confusion
  • Hidden state between cell executions
  • Less widely adopted than Markdown
  • Fewer rendering engines available
  • Limited code syntax highlighting support
  • Not supported by GitHub or most modern platforms
  • Smaller community and ecosystem
Common Uses
  • Data exploration and analysis
  • Machine learning model development
  • Scientific research documentation
  • Educational tutorials and coursework
  • Reproducible research papers
  • Redmine project management wikis
  • Textpattern CMS content authoring
  • Web blog posts and articles
  • Technical documentation with HTML output
  • Content management system entries
Best For
  • Data science and machine learning workflows
  • Interactive code exploration and prototyping
  • Reproducible research and analysis
  • Educational tutorials and demonstrations
  • Redmine wiki pages and project documentation
  • Textpattern CMS content authoring
  • Web publishing with clean HTML output
  • Readable markup for non-technical content editors
Version History
Introduced: 2014 (Project Jupyter)
Current Version: nbformat 4.5
Status: Active, widely adopted
Evolution: From IPython Notebook to Jupyter ecosystem
Introduced: 2002 by Dean Allen
Current Version: Textile 2
Status: Stable, niche usage
Evolution: Created for Textpattern CMS, adopted by Redmine
Software Support
Primary: JupyterLab, Jupyter Notebook, VS Code
Cloud: Google Colab, AWS SageMaker, Azure Notebooks
Libraries: nbformat, nbconvert, papermill
Other: GitHub rendering, Kaggle, Deepnote
Platforms: Redmine, Textpattern, Locomotive CMS
Libraries: RedCloth (Ruby), textile (Python), php-textile
Converters: Pandoc (textile writer)
Editors: Any text editor, Textile preview plugins

Why Convert IPYNB to TEXTILE?

Converting IPYNB to Textile is essential when you need to publish Jupyter Notebook content on web platforms that use Textile as their markup language. Redmine, one of the most popular open-source project management tools, uses Textile as its default formatting language for wikis, issues, and documentation. Converting notebooks to Textile lets you seamlessly integrate data science work into your project management workflow.

Textile offers a clean syntax that produces well-structured HTML. When notebook code cells and markdown documentation are converted to Textile, they render with proper headings, formatted code blocks, and organized lists. This makes the content immediately publishable on Textile-powered platforms without manual reformatting.

For teams using Redmine for project tracking, converting analysis notebooks to Textile enables direct inclusion of data science findings in project wikis and issue descriptions. This keeps all project documentation in one place, regardless of whether it originated from code notebooks or traditional authoring.

Key Benefits of Converting IPYNB to TEXTILE:

  • Redmine Integration: Publish notebook findings directly in Redmine wikis and issues
  • Clean HTML Output: Textile generates well-structured, semantic HTML
  • Readable Source: Textile markup is easy to read even in raw form
  • Code Formatting: Code cells are wrapped in bc. blocks for proper display
  • Web Publishing: Ready for Textpattern and other Textile-powered CMS platforms
  • CSS Support: Textile allows inline CSS classes for custom styling
  • Plain Text: Edit with any text editor before publishing

Practical Examples

Example 1: Redmine Wiki Page from Notebook

Input IPYNB file (notebook.ipynb):

{
  "cells": [
    {
      "cell_type": "markdown",
      "source": ["# Sprint 12 Analysis Results\n", "## Performance Metrics\n", "Key metrics from the latest deployment monitoring."]
    },
    {
      "cell_type": "code",
      "source": ["avg_response_time = 142  # ms\n", "error_rate = 0.003\n", "uptime = 99.97\n", "print(f'Response time: {avg_response_time}ms')"]
    }
  ]
}

Output Textile file (notebook.textile):

h1. Sprint 12 Analysis Results

h2. Performance Metrics

Key metrics from the latest deployment monitoring.

bc.. avg_response_time = 142  # ms
error_rate = 0.003
uptime = 99.97
print(f'Response time: {avg_response_time}ms')

p. 

Example 2: Blog Post from Data Analysis Notebook

Input IPYNB file (analysis.ipynb):

{
  "cells": [
    {
      "cell_type": "markdown",
      "source": ["# Understanding Customer Segmentation\n", "We used **k-means clustering** to identify three\n", "distinct customer groups from purchase data."]
    },
    {
      "cell_type": "code",
      "source": ["from sklearn.cluster import KMeans\n", "\n", "kmeans = KMeans(n_clusters=3, random_state=42)\n", "labels = kmeans.fit_predict(features)\n", "print(f'Cluster sizes: {np.bincount(labels)}')"]
    },
    {
      "cell_type": "markdown",
      "source": ["## Key Findings\n", "- **Cluster 0**: High-value repeat buyers\n", "- **Cluster 1**: Occasional bargain shoppers\n", "- **Cluster 2**: New customers in onboarding"]
    }
  ]
}

Output Textile file (analysis.textile):

h1. Understanding Customer Segmentation

We used *k-means clustering* to identify three
distinct customer groups from purchase data.

bc.. from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=42)
labels = kmeans.fit_predict(features)
print(f'Cluster sizes: {np.bincount(labels)}')

p.

h2. Key Findings

* *Cluster 0*: High-value repeat buyers
* *Cluster 1*: Occasional bargain shoppers
* *Cluster 2*: New customers in onboarding

Example 3: Technical Documentation from Notebook

Input IPYNB file (research.ipynb):

{
  "cells": [
    {
      "cell_type": "markdown",
      "source": ["## API Integration Guide\n", "How to connect to the prediction service endpoint."]
    },
    {
      "cell_type": "code",
      "source": ["import requests\n", "\n", "response = requests.post(\n", "    'https://api.example.com/predict',\n", "    json={'features': [1.2, 3.4, 5.6]}\n", ")\n", "result = response.json()\n", "print(result['prediction'])"]
    }
  ]
}

Output Textile file (research.textile):

h2. API Integration Guide

How to connect to the prediction service endpoint.

bc.. import requests

response = requests.post(
    'https://api.example.com/predict',
    json={'features': [1.2, 3.4, 5.6]}
)
result = response.json()
print(result['prediction'])

p. 

Frequently Asked Questions (FAQ)

Q: Can I paste the output directly into Redmine?

A: Yes, the generated Textile markup is compatible with Redmine's wiki and issue description editor. You can paste it directly and it will render with proper formatting including headings, code blocks, lists, and emphasis.

Q: How are code cells formatted in Textile?

A: Code cells are wrapped in Textile's bc. (block code) syntax, which preserves indentation and renders as preformatted text. This ensures Python code, function definitions, and other code content maintains its structure in the output.

Q: Is Textile the same as Markdown?

A: No, Textile and Markdown are different markup languages with different syntax. Textile uses *bold* and _italic_ notation, h1. for headings, and # for ordered lists, while Markdown uses **bold**, *italic*, # for headings, and 1. for ordered lists.

Q: Does Textile support syntax highlighting for code?

A: Basic Textile does not support language-specific syntax highlighting. However, some Textile renderers (like Redmine with plugins) support specifying code language. The converter outputs standard Textile code blocks that work across all Textile processors.

Q: How are notebook markdown headings converted to Textile?

A: Markdown headings are mapped to Textile heading syntax: # becomes h1., ## becomes h2., ### becomes h3., and so on. This preserves the document hierarchy from the original notebook in Textile format.

Q: Can I convert Textile back to Markdown later?

A: Yes, tools like Pandoc can convert between Textile and Markdown in both directions. This gives you flexibility to move content between platforms that use different markup languages.

Q: Are tables preserved in the Textile output?

A: If the notebook markdown contains tables, they are converted to Textile table syntax using the pipe (|) notation. Textile tables support headers, alignment, and cell spanning for structured data presentation.

Q: What happens to LaTeX equations in the notebook?

A: LaTeX expressions are included as plain text in the Textile output. Standard Textile does not render LaTeX natively, but some platforms (like Redmine with MathJax plugins) can render LaTeX equations embedded in Textile content.