Spaces:
Runtime error
Runtime error
File size: 5,722 Bytes
5132af6 c3cdbfc a5ff647 c3cdbfc 5132af6 a5ff647 c3cdbfc 5132af6 c3cdbfc a5ff647 5132af6 a5ff647 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import gradio as gr
import os
from huggingface_hub import HfApi
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
# We'll use Mistral-7B as it's a good balance of quality and performance
MODEL_NAME = "mistralai/Mistral-7B-Instruct-v0.2"
# System prompt that incorporates the configuration
SYSTEM_PROMPT = """
You are Spectral Satya, a specialized AI assistant focused on crafting cinematic reality through expert prompt engineering for AI video generation.
Your primary purpose is to help users create highly realistic, professional-quality cinematic scene prompts for platforms including RunwayML, Pika, Kling, Haiper, Vidu, Veo, PixVerse, and other T2V/I2V models.
Core Principles:
- Realism Above All: Always prioritize photorealistic, cinematic quality over stylized or animated looks
- Specificity is King: Eliminate vagueness in all prompts; be precise about subjects, actions, environments, camera work, and lighting
- Show, Don't Tell: Use visual language that paints clear pictures rather than abstract concepts
- Defensive Prompting: Always include robust negative prompts to ward off unwanted styles and artifacts
Always structure prompts with these essential elements:
1. Style Declaration: Begin with "cinematic, photorealistic" or similar terms establishing the desired realism
2. Camera Specifications: Include shot type, angle, movement, and focus details
3. Subject Definition: Clearly define characters/subjects with specific visual attributes
4. Action Description: Detail precise movements and interactions
5. Environment Details: Describe setting with specific visual elements
6. Lighting & Atmosphere: Specify lighting conditions, mood, and atmospheric elements
7. Color & Grading: Include color palette or grading style information
8. Negative Prompts: Always provide comprehensive negative prompting to prevent unwanted styles
Your responses should follow the principles and techniques outlined in "The Prompt Engineer's Codex: Crafting Cinematic Reality with AI Video".
"""
# Initialize tokenizer and model
try:
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
pipe = pipeline(
"text-generation",
model=MODEL_NAME,
tokenizer=tokenizer,
max_new_tokens=1024,
temperature=0.7,
top_p=0.95,
repetition_penalty=1.15
)
except Exception as e:
print(f"Error loading model: {e}")
# Fallback to a smaller model if the main one fails
MODEL_NAME = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
pipe = pipeline(
"text-generation",
model=MODEL_NAME,
tokenizer=tokenizer,
max_new_tokens=512,
temperature=0.7,
top_p=0.95,
repetition_penalty=1.15
)
def format_prompt(user_input, chat_history):
"""Format the prompt for the model with chat history."""
messages = []
# Add system prompt
messages.append({"role": "system", "content": SYSTEM_PROMPT})
# Add chat history
for user_msg, assistant_msg in chat_history:
messages.append({"role": "user", "content": user_msg})
messages.append({"role": "assistant", "content": assistant_msg})
# Add current user input
messages.append({"role": "user", "content": user_input})
# Format for the model
formatted_prompt = ""
for message in messages:
if message["role"] == "system":
formatted_prompt += f"<s>[INST] <<SYS>>\n{message['content']}\n<</SYS>>\n\n"
elif message["role"] == "user":
if formatted_prompt:
formatted_prompt += f"{message['content']} [/INST]"
else:
formatted_prompt += f"<s>[INST] {message['content']} [/INST]"
elif message["role"] == "assistant":
formatted_prompt += f" {message['content']} </s><s>[INST] "
return formatted_prompt
def generate_response(user_input, chat_history):
"""Generate a response using the model."""
prompt = format_prompt(user_input, chat_history)
try:
response = pipe(prompt)[0]['generated_text']
# Extract only the new content (the model's response)
response = response.split('[/INST]')[-1].strip()
if '</s>' in response:
response = response.split('</s>')[0].strip()
# Clean up any remaining tags
response = response.replace('<s>', '').replace('</s>', '').replace('[INST]', '').replace('[/INST]', '')
return response
except Exception as e:
return f"I apologize, but I encountered an error: {str(e)}. Please try again with a different query."
def spectral_satya_chat(user_input, chat_history):
"""Main chat function for the Gradio interface."""
response = generate_response(user_input, chat_history)
chat_history.append((user_input, response))
return "", chat_history
def generate_cinematic_prompt(scene_description, subject_details, camera_preferences, lighting_mood, platform):
"""Generate a complete cinematic prompt based on user inputs."""
prompt = f"""
Please create a detailed cinematic prompt for the following scene:
Scene Description: {scene_description}
Subject Details: {subject_details}
Camera Preferences: {camera_preferences}
Lighting and Mood: {lighting_mood}
Target Platform: {platform}
I need both a positive prompt and a negative prompt that follows the principles from The Prompt Engineer's Codex.
"""
chat_history = []
response = generate_response(prompt, chat_history)
return response
# Define example prompts
EXAMPLE_PROMPTS = """
# Example Cinematic Prompts
## Urban Character Scene
|