Skip to content
/ luna Public

A content syndication tool for artists and creative technologists

Notifications You must be signed in to change notification settings

mayanayza/luna

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ¦‹ Luna

Luna is a tool for artists and creative technologists which automates the creation, management, and syndication of art and personal projects across various channels. It streamlines the process of maintaining consistent organization of your work across different platforms.

Overview

Luna simplifies your creative workflow through a command-line interface that:

  • Creates standardized local project directories for work-in-progress files and media
  • Sets up GitHub repositories with proper structure and documentation
  • Generates consistent metadata across all your projects
  • Optionally integrates with Things 3 for task management (macOS only)

When you're ready to share your work, Luna facilitates publication through various channels:

  • Portfolio website (designed for Jekyll-based sites)
  • GitHub repositories
  • PDF generation for exhibition submissions and open calls
  • Raw file exports for other purposes

Features

  • Single Source of Truth: Maintain all project information in one place to eliminate redundancy
  • Standardized Structure: Consistent project organization for easier navigation and management
  • Multi-Channel Publishing:
    • Website: Generate Jekyll-compatible posts and media files
    • GitHub: Create repositories and update README files
    • PDF: Format project documentation for submissions with customizable options
    • Raw: Export organized files for other platforms
  • Optional Integrations:
    • Things 3 on macOS for task management

Installation

  1. Clone the repository:
git clone [email protected]:yourusername/luna.git
cd luna
  1. Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  1. Install dependencies:
pip install -r src/requirements.txt
  1. Create your environment file:
cp src/.env.example .env
# Edit .env with your values
  1. Set up your personal info:
cp src/personal-info.yml.example src/personal-info.yml
# Edit with your information

Configuration

Edit the .env file with your specific settings:

Required Settings

  • PROJECT_BASE_DIR: Path where you want to create and manage projects
  • FIRST_NAME and LAST_NAME: Your name for documentation
  • WEBSITE_DOMAIN: The domain where your Jekyll website is hosted
  • WEBSITE_DIR: Path to your website directory
  • WEBSITE_POSTS: Relative path to posts directory (e.g., "_posts")
  • WEBSITE_MEDIA: Relative path to media directory (e.g., "_media")
  • WEBSITE_PAGES: Relative path to pages directory (e.g., "_pages")

Optional Settings

  • GITHUB_USERNAME and GITHUB_TOKEN: For GitHub integration
  • ENABLE_THINGS3: Set to "true" to enable Things 3 integration
  • THINGS3_AREA: Area in Things 3 where projects should be created

Usage

All commands are run using the main script:

Creating a New Project

python -m src.script.main create

This interactive command will:

  1. Prompt for a project display name
  2. Create a standardized directory structure
  3. Initialize basic metadata files
  4. Optionally create a GitHub repository
  5. Optionally create a Things 3 project (if enabled)

Listing Projects

python -m src.script.main list

# Sort by different criteria
python -m src.script.main list --sort-by date
python -m src.script.main list --sort-by priority
python -m src.script.main list --sort-by status

# Filter by status
python -m src.script.main list --status in_progress

Renaming a Project

python -m src.script.main rename

This updates the project locally and across all integration channels.

Deleting a Project

python -m src.script.main delete
# or
python -m src.script.main delete --projects project-name

Publishing to Channels

# Publish specific projects to all channels
python -m src.script.main publish --projects project1 project2 --all-channels

# Publish all projects to specific channels
python -m src.script.main publish --all-projects --channels github web

# Publish specific projects to specific channels
python -m src.script.main publish --projects project1 --channels pdf

Channel-Specific Options

PDF Channel

# Generate PDF with images collated in the same document
python -m src.script.main publish --projects project1 --channels pdf --collate-images

# Generate PDF with separate image files and specific dimensions
python -m src.script.main publish --projects project1 --channels pdf --max-width 1200 --max-height 800

# Add a prefix to exported filenames
python -m src.script.main publish --projects project1 --channels pdf --filename-prepend "Exhibition-2023-"

# Specify submission name for PDF
python -m src.script.main publish --projects project1 --channels pdf --submission-name "Gallery-Open-Call-2023"

GitHub Channel

# Stage (generate README.md without pushing)
python -m src.script.main stage --projects project1 --channels github

# Publish with commit message
python -m src.script.main publish --projects project1 --channels github --commit-message "Updated project documentation"

Website Channel

# Stage website content (project status must be "complete")
python -m src.script.main stage --projects project1 --channels web

# Publish to website
python -m src.script.main publish --projects project1 --channels web

Raw Channel

# Export files to output folder
python -m src.script.main publish --projects project1 --channels raw

Project Structure

Each project is created with the following structure:

project-name/
β”œβ”€β”€ src/                  # Source code for the project
β”œβ”€β”€ media/                # Media files for publication
β”‚   β”œβ”€β”€ images/           # Image files
β”‚   β”œβ”€β”€ videos/           # Video files
β”‚   β”œβ”€β”€ audio/            # Audio files
β”‚   β”œβ”€β”€ models/           # 3D model files
β”‚   β”œβ”€β”€ docs/             # Document files
β”‚   └── embeds/           # Embed content
β”œβ”€β”€ media-internal/       # Working/draft media files (not published)
β”‚   β”œβ”€β”€ images/
β”‚   β”œβ”€β”€ videos/
β”‚   β”œβ”€β”€ audio/
β”‚   β”œβ”€β”€ models/
β”‚   └── docs/
β”œβ”€β”€ content/              # Project content and metadata
β”‚   β”œβ”€β”€ content.md        # Main content markdown
β”‚   β”œβ”€β”€ metadata.yml      # Project metadata
β”‚   └── README.md         # Project README

The media-internal directory is intended for work-in-progress assets that won't be committed to GitHub. When files are ready for publication, move them to the corresponding subdirectory in the media folder.

Development

Project Structure

luna/
β”œβ”€β”€ src/                  # Source code
β”‚   β”œβ”€β”€ script/           # Main script modules
β”‚   β”‚   β”œβ”€β”€ channels/     # Publication channel handlers
β”‚   β”‚   β”œβ”€β”€ templates/    # Templates for various outputs
β”‚   β”‚   └── utils.py      # Utility functions
β”‚   β”œβ”€β”€ requirements.txt  # Project dependencies
β”‚   └── .env.example      # Environment variable template
└── tests/                # Test suite (see testing strategy)

Adding a New Channel

  1. Create a new handler file in the src/script/channels/ directory
  2. Create any necessary templates in the src/script/templates/ directory
  3. Add your channel to the channel registry in src/script/main.py
  4. Implement the required channel interface methods (stage, publish, etc.)

Testing

See the Testing Strategy document for details on how to run and create tests for Luna.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A content syndication tool for artists and creative technologists

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published